Same name and namespace in other branches
  1. 5.x includes/install.inc \drupal_verify_install_file()
  2. 6.x includes/install.inc \drupal_verify_install_file()
  3. 7.x includes/install.inc \drupal_verify_install_file()
  4. 8.9.x core/includes/install.inc \drupal_verify_install_file()
  5. 9 core/includes/install.inc \drupal_verify_install_file()

Verifies the state of the specified file.

Parameters

$file: The file to check for.

$mask: An optional bitmask created from various FILE_* constants.

$type: The type of file. Can be file (default), dir, or link.

bool $auto_fix: (optional) Determines whether to attempt fixing the permissions according to the provided $mask. Defaults to TRUE.

Return value

bool TRUE on success or FALSE on failure. A message is set for the latter.

1 call to drupal_verify_install_file()
SitesDirectoryHardeningTest::testSitesDirectoryHardening in core/modules/system/tests/src/Functional/System/SitesDirectoryHardeningTest.php
Tests the default behavior to restrict directory permissions is enforced.

File

core/includes/install.inc, line 594
API functions for installing modules and themes.

Code

function drupal_verify_install_file($file, $mask = NULL, $type = 'file', $auto_fix = TRUE) {
  $return = TRUE;

  // Check for files that shouldn't be there.
  if (isset($mask) && $mask & FILE_NOT_EXIST && file_exists($file)) {
    return FALSE;
  }

  // Verify that the file is the type of file it is supposed to be.
  if (isset($type) && file_exists($file)) {
    $check = 'is_' . $type;
    if (!function_exists($check) || !$check($file)) {
      $return = FALSE;
    }
  }

  // Verify file permissions.
  if (isset($mask)) {
    $masks = [
      FILE_EXIST,
      FILE_READABLE,
      FILE_WRITABLE,
      FILE_EXECUTABLE,
      FILE_NOT_READABLE,
      FILE_NOT_WRITABLE,
      FILE_NOT_EXECUTABLE,
    ];
    foreach ($masks as $current_mask) {
      if ($mask & $current_mask) {
        switch ($current_mask) {
          case FILE_EXIST:
            if (!file_exists($file)) {
              if ($type == 'dir' && $auto_fix) {
                drupal_install_mkdir($file, $mask);
              }
              if (!file_exists($file)) {
                $return = FALSE;
              }
            }
            break;
          case FILE_READABLE:
            if (!is_readable($file)) {
              $return = FALSE;
            }
            break;
          case FILE_WRITABLE:
            if (!is_writable($file)) {
              $return = FALSE;
            }
            break;
          case FILE_EXECUTABLE:
            if (!is_executable($file)) {
              $return = FALSE;
            }
            break;
          case FILE_NOT_READABLE:
            if (is_readable($file)) {
              $return = FALSE;
            }
            break;
          case FILE_NOT_WRITABLE:
            if (is_writable($file)) {
              $return = FALSE;
            }
            break;
          case FILE_NOT_EXECUTABLE:
            if (is_executable($file)) {
              $return = FALSE;
            }
            break;
        }
      }
    }
  }
  if (!$return && $auto_fix) {
    return drupal_install_fix_file($file, $mask);
  }
  return $return;
}