-
Côme Chilliet authored
This is easy to check as management classes respect the size limit option. issue #6169
Unverified07e29613
<?php
/*
This code is part of FusionDirectory (http://www.fusiondirectory.org/)
Copyright (C) 2017-2018 FusionDirectory
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*!
* \file class_ldapSizeLimit.inc
* Source code for the class ldapSizeLimit
*/
/*!
* \brief Class ldapSizeLimit
* This class contains all informations and functions to handle the LDAP size limit dialogs, configuration and bypass
*/
class ldapSizeLimit
{
/*! \brief Current size limit */
protected $sizeLimit;
/*! \brief Ignore dialogs */
protected $ignore;
/*! \brief Limit was exceeded */
protected $limitExceeded;
function __construct ()
{
global $config;
$this->sizeLimit = $config->get_cfg_value('LDAPSIZELIMIT', 200);
$this->ignore = preg_match('/true/i', $config->get_cfg_value('LDAPSIZEIGNORE', 'TRUE'));
}
function getSizeLimit ()
{
return $this->sizeLimit;
}
function setSizeLimit ($limit)
{
$this->sizeLimit = $limit;
}
function setLimitExceeded ($exceeded = TRUE)
{
$this->limitExceeded = $exceeded;
}
/*!
* \brief Handle sizelimit dialog related posts
*/
function update ()
{
if (isset($_POST['set_size_action']) && isset($_POST['action'])) {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
switch ($_POST['action']) {
case 'newlimit':
if (isset($_POST['new_limit']) && tests::is_id($_POST['new_limit'])) {
if (($error = static::checkMaxInputVars($_POST['new_limit'])) !== FALSE) {
$error->display();
} else {
$this->sizeLimit = intval($_POST['new_limit']);
$this->ignore = FALSE;
}
}
break;
case 'ignore':
$this->sizeLimit = 0;
$this->ignore = TRUE;
break;
case 'limited':
$this->ignore = TRUE;
break;
default:
break;
}
}
/* Allow fallback to dialog */
if (isset($_POST['edit_sizelimit'])) {
$this->ignore = FALSE;
}
}
/*!
* \brief Show sizelimit configuration dialog
*
* Show sizelimit configuration dialog when number
* of entries exceeded the sizelimit
*/
function check ()
{
global $config;
/* Ignore dialog? */
if ($this->ignore) {
return '';
}
/* Eventually show dialog */
if ($this->limitExceeded) {
$smarty = get_smarty();
$smarty->assign('sizelimit', $this->sizeLimit);
return $smarty->fetch(get_template_path('sizelimit.tpl'));
}
return '';
}
/*!
* \brief Print a sizelimit warning
*
* Print a sizelimit warning when number
* of entries exceeded the sizelimit
*/
function renderWarning ()
{
if ($this->limitExceeded) {
$config = '<input type="submit" name="edit_sizelimit" value="'.htmlescape(_('Configure')).'" formnovalidate="formnovalidate"/>';
return '('.htmlescape(_('incomplete')).') '.$config;
}
return '';
}
/**
141142143144145146147148149150151152153154155156157158159160161162
* Checks if a new limit or a number of entries is too high regarding to max_input_vars.
*
* If there are more items in $_POST than max_input_vars, PHP will discard some of them and will cause a CSRF error.
*/
static public function checkMaxInputVars (int $newLimit, string $messageTemplate = NULL)
{
$maxInputVars = ini_get('max_input_vars');
if (($maxInputVars != '') && (($newLimit + 10) >= intval($maxInputVars))) {
return new FusionDirectoryError(
htmlescape(sprintf(
$messageTemplate ?? _('Limit %d is greater than or too close to configured max_input_vars PHP ini setting of %d. Please change max_input_vars ini setting to a higher value if you wish to set the limit higher.'),
$newLimit,
$maxInputVars
))
);
}
return FALSE;
}
}