Quantcast
Channel: Issues for Drupal core
Viewing all articles
Browse latest Browse all 301020

[D7 backport] drupal_mkdir does not set permissions to directories it created recursively

$
0
0

Follow-up to #1068266: drupal_mkdir does not set permissions to directories it created recursively

Problem/Motivation

PHP mkdir() does not set file permissions as expected when we create directories recursively (See http://us.php.net/manual/en/function.mkdir.php#100106 for more information.) As a result:

Proposed resolution

The original patches addressed the issue at the drupal_mkdir() level, but it must also be addressed at the LocalStreamWrapper level. Also we do not want to repeat the code for the recursive bits in both locations, so the best way to address it is with a new function drupal_mkdir_local() to also recursively set the permissions.

Here's the IRC discussion. Let's presume you have an URI like s3://styles/large/s3/foo.jpg (coming from image_style_path). This does not mean that s3://styles/large has any meaning at all. Core does not use it, so why should the stream wrapper handle it? Accessing it might throw an exception for all you know. (see also http://www.advomatic.com/blogs/aaron-winborn/stream-wrappers-and-you ). So what we need to do is:

Remaining tasks

  1. Introduce drupal_mkdir_local().This handles file paths like sites/default/files/styles/large/public/foo.jpg and NOT schemed URIs. Can be refactored from http://drupalbin.com/21585

  2. drupal_mkdir checks for a scheme, if it's not there, it's a local path so it calls drupal_mkdir_local(). http://privatepaste.com/fda114cd01

  3. The local stream wrapper already has a local path so it calls drupal_mkdir_local(). http://privatepaste.com/7a5832a7fd

  4. Write a simpletest to check a new recursively created local directory for correct file system permissions.

  5. Backport the above to D7 s#DrupalLocalStreamWrapper::mkdir#LocalStreamWrapper::mkdir#

Original report by [weboide]

// Text of original report here.
file_prepare_directory does not seem to set the permissions to folders it has created recursively.

For example:

In settings.php:

$conf['file_chmod_directory'] = 02775; // even tried with 0775

And then run:

$f = 'public://test1/test2/test3/'; file_prepare_directory(\$f, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);

would create

`-- [drwxr-sr-x]  test1
    `-- [drwxr-sr-x]  test2
        `-- [drwxrwxr-x]  test3

I was expecting to see test1 and test2 with group write permission.


Viewing all articles
Browse latest Browse all 301020

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>