Issue #2110863 by sun, cpj: Support open_basedir.
parent
c7edf43503
commit
55890b471a
|
@ -1497,6 +1497,9 @@ function drupal_basename($uri, $suffix = NULL) {
|
|||
* @see mkdir()
|
||||
* @see http://drupal.org/node/515192
|
||||
* @ingroup php_wrappers
|
||||
*
|
||||
* @todo Update with open_basedir compatible recursion logic from
|
||||
* \Drupal\Component\PhpStorage\FileStorage::ensureDirectory().
|
||||
*/
|
||||
function drupal_mkdir($uri, $mode = NULL, $recursive = FALSE, $context = NULL) {
|
||||
if (!isset($mode)) {
|
||||
|
|
|
@ -36,12 +36,6 @@ if (ini_get('safe_mode')) {
|
|||
exit;
|
||||
}
|
||||
|
||||
// Exit early if the PHP option open_basedir is enabled to avoid fatal errors.
|
||||
if (ini_get('open_basedir')) {
|
||||
print 'Your PHP installation has open_basedir enabled. Drupal currently requires the open_basedir option to be turned off. See the <a href="http://www.php.net/manual/en/ini.core.php#ini.open-basedir">PHP manual</a> for details of how to do this. This issue is currently <a href="https://drupal.org/node/2110863">under discussion at drupal.org</a>.';
|
||||
exit;
|
||||
}
|
||||
|
||||
// Start the installer.
|
||||
require_once __DIR__ . '/includes/install.core.inc';
|
||||
install_drupal();
|
||||
|
|
|
@ -58,31 +58,46 @@ class FileStorage implements PhpStorageInterface {
|
|||
}
|
||||
|
||||
/**
|
||||
* Ensures the root directory exists and has the right permissions.
|
||||
* Ensures the requested directory exists and has the right permissions.
|
||||
*
|
||||
* For compatibility with open_basedir, the requested directory is created
|
||||
* using a recursion logic that is based on the relative directory path/tree:
|
||||
* It works from the end of the path recursively back towards the root
|
||||
* directory, until an existing parent directory is found. From there, the
|
||||
* subdirectories are created.
|
||||
*
|
||||
* @param string $directory
|
||||
* The directory path.
|
||||
*
|
||||
* @param int $mode
|
||||
* The mode, permissions, the directory should have.
|
||||
* @param bool $is_backwards_recursive
|
||||
* Internal use only.
|
||||
*
|
||||
* @return bool
|
||||
* TRUE if the directory exists or has been created, FALSE otherwise.
|
||||
*/
|
||||
protected function ensureDirectory($directory, $mode = 0777) {
|
||||
if (!file_exists($directory)) {
|
||||
// mkdir() obeys umask() so we need to mkdir() and chmod() manually.
|
||||
$parts = explode('/', $directory);
|
||||
$path = '';
|
||||
$delimiter = '';
|
||||
do {
|
||||
$part = array_shift($parts);
|
||||
$path .= $delimiter . $part;
|
||||
$delimiter = '/';
|
||||
// For absolute paths the first part will be empty.
|
||||
if ($part && !file_exists($path)) {
|
||||
mkdir($path);
|
||||
chmod($path, $mode);
|
||||
}
|
||||
} while ($parts);
|
||||
protected function ensureDirectory($directory, $mode = 0777, $is_backwards_recursive = FALSE) {
|
||||
// If the directory exists already, there's nothing to do.
|
||||
if (is_dir($directory)) {
|
||||
return TRUE;
|
||||
}
|
||||
// Otherwise, try to create the directory and ensure to set its permissions,
|
||||
// because mkdir() obeys the umask of the current process.
|
||||
if (is_dir($parent = dirname($directory))) {
|
||||
// If the parent directory exists, then the backwards recursion must end,
|
||||
// regardless of whether the subdirectory could be created.
|
||||
if ($status = mkdir($directory)) {
|
||||
// Only try to chmod() if the subdirectory could be created.
|
||||
$status = chmod($directory, $mode);
|
||||
}
|
||||
return $is_backwards_recursive ? TRUE : $status;
|
||||
}
|
||||
// If the parent directory and the requested directory does not exist and
|
||||
// could not be created above, walk the requested directory path back up
|
||||
// until an existing directory is hit, and from there, recursively create
|
||||
// the sub-directories. Only if that recursion succeeds, create the final,
|
||||
// originally requested subdirectory.
|
||||
return $this->ensureDirectory($parent, $mode, TRUE) && mkdir($directory) && chmod($directory, $mode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -510,7 +510,7 @@ class DrupalKernel implements DrupalKernelInterface, TerminableInterface {
|
|||
foreach (array('Core', 'Component') as $parent_directory) {
|
||||
$path = DRUPAL_ROOT . '/core/lib/Drupal/' . $parent_directory;
|
||||
foreach (new \DirectoryIterator($path) as $component) {
|
||||
if (!$component->isDot() && is_dir($component->getPathname() . '/Plugin')) {
|
||||
if (!$component->isDot() && $component->isDir() && is_dir($component->getPathname() . '/Plugin')) {
|
||||
$namespaces['Drupal\\' . $parent_directory . '\\' . $component->getFilename()] = DRUPAL_ROOT . '/core/lib';
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue