Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-1.9.git;a=commitdiff;h=04b5ba5cb2f0106e654725936750923bec32744b

commit 04b5ba5cb2f0106e654725936750923bec32744b
Author: kikadf <[email protected]>
Date:   Wed Jul 23 08:18:48 2014 +0200

drupal7-7.22-2arcturus3-x86_64

* Security fix rel bump

diff --git a/source/network-extra/drupal7/FrugalBuild 
b/source/network-extra/drupal7/FrugalBuild
index 90531d4..2644115 100644
--- a/source/network-extra/drupal7/FrugalBuild
+++ b/source/network-extra/drupal7/FrugalBuild
@@ -1,9 +1,10 @@
# Compiling Time: 0 SBU
+# Contributor: kikadf <[email protected]>
# Maintainer: CSÉCSY László <[email protected]>

pkgname=drupal7
pkgver=7.22
-pkgrel=2arcturus2
+pkgrel=2arcturus3
pkgdesc="An open source content management platform"
url="http://drupal.org";
rodepends=('apache' 'php')
@@ -20,10 +21,11 @@ options=('stick')

# FSA fix ***
source=(${source[@]} SA-CORE-2013-003.patch SA-CORE-2014-001.patch
-                     SA-CORE-2014-002.patch)
+                     SA-CORE-2014-002.patch SA-CORE-2014-003.patch)
sha1sums=(${sha1sums[@]} '55f891eb3f4bebe75473073aad11cb843f19fcfe' \
'239b0251eac1a8dc8fb3a2368423d492df31cdea' \
-                         'a05c385dd251408ccef5cb7b2df115b1251473b9')
+                         'a05c385dd251408ccef5cb7b2df115b1251473b9' \
+                         '69ae289e73bdc43b8ac926fa7b33e1e99dcf5814')
_F_cd_path="${pkgname//7/}-$pkgver"
# ***********

diff --git a/source/network-extra/drupal7/SA-CORE-2014-003.patch 
b/source/network-extra/drupal7/SA-CORE-2014-003.patch
new file mode 100644
index 0000000..c481ef0
--- /dev/null
+++ b/source/network-extra/drupal7/SA-CORE-2014-003.patch
@@ -0,0 +1,200 @@
+Index: drupal7/includes/bootstrap.inc
+===================================================================
+--- drupal7.orig/includes/bootstrap.inc
++++ drupal7/includes/bootstrap.inc
+@@ -722,7 +722,14 @@ function drupal_environment_initialize()
+  *  TRUE if only containing valid characters, or FALSE otherwise.
+  */
+ function drupal_valid_http_host($host) {
+-  return preg_match('/^\[?(?:[a-zA-Z0-9-:\]_]+\.?)+$/', $host);
++  // Limit the length of the host name to 1000 bytes to prevent DoS attacks 
with
++  // long host names.
++  return strlen($host) <= 1000
++    // Limit the number of subdomains and port separators to prevent DoS 
attacks
++    // in conf_path().
++    && substr_count($host, '.') <= 100
++    && substr_count($host, ':') <= 100
++    && preg_match('/^\[?(?:[a-zA-Z0-9-:\]_]+\.?)+$/', $host);
+ }
+
+ /**
+Index: drupal7/includes/file.inc
+===================================================================
+--- drupal7.orig/includes/file.inc
++++ drupal7/includes/file.inc
+@@ -1996,23 +1996,7 @@ function file_download() {
+   $target = implode('/', $args);
+   $uri = $scheme . '://' . $target;
+   if (file_stream_wrapper_valid_scheme($scheme) && file_exists($uri)) {
+-    // Let other modules provide headers and controls access to the file.
+-    // module_invoke_all() uses array_merge_recursive() which merges header
+-    // values into a new array. To avoid that and allow modules to override
+-    // headers instead, use array_merge() to merge the returned arrays.
+-    $headers = array();
+-    foreach (module_implements('file_download') as $module) {
+-      $function = $module . '_file_download';
+-      $result = $function($uri);
+-      if ($result == -1) {
+-        // Throw away the headers received so far.
+-        $headers = array();
+-        break;
+-      }
+-      if (isset($result) && is_array($result)) {
+-        $headers = array_merge($headers, $result);
+-      }
+-    }
++    $headers = file_download_headers($uri);
+     if (count($headers)) {
+       file_transfer($uri, $headers);
+     }
+@@ -2024,6 +2008,69 @@ function file_download() {
+   drupal_exit();
+ }
+
++/**
++ * Retrieves headers for a private file download.
++ *
++ * Calls all module implementations of hook_file_download() to retrieve 
headers
++ * for files by the module that originally provided the file. The presence of
++ * returned headers indicates the current user has access to the file.
++ *
++ * @param $uri
++ *   The URI for the file whose headers should be retrieved.
++ *
++ * @return
++ *   If access is allowed, headers for the file, suitable for passing to
++ *   file_transfer(). If access is not allowed, an empty array will be 
returned.
++ *
++ * @see file_transfer()
++ * @see file_download_access()
++ * @see hook_file_downlaod()
++ */
++function file_download_headers($uri) {
++  // Let other modules provide headers and control access to the file.
++  // module_invoke_all() uses array_merge_recursive() which merges header
++  // values into a new array. To avoid that and allow modules to override
++  // headers instead, use array_merge() to merge the returned arrays.
++  $headers = array();
++  foreach (module_implements('file_download') as $module) {
++    $function = $module . '_file_download';
++    $result = $function($uri);
++    if ($result == -1) {
++      // Throw away the headers received so far.
++      $headers = array();
++      break;
++    }
++    if (isset($result) && is_array($result)) {
++      $headers = array_merge($headers, $result);
++    }
++  }
++  return $headers;
++}
++
++/**
++ * Checks that the current user has access to a particular file.
++ *
++ * The return value of this function hinges on the return value from
++ * file_download_headers(), which is the function responsible for collecting
++ * access information through hook_file_download().
++ *
++ * If immediately transferring the file to the browser and the headers will
++ * need to be retrieved, the return value of file_download_headers() should be
++ * used to determine access directly, so that access checks will not be run
++ * twice.
++ *
++ * @param $uri
++ *   The URI for the file whose access should be retrieved.
++ *
++ * @return
++ *   Boolean TRUE if access is allowed. FALSE if access is not allowed.
++ *
++ * @see file_download_headers()
++ * @see hook_file_download()
++ */
++function file_download_access($uri) {
++  return count(file_download_headers($uri)) > 0;
++}
+
+ /**
+  * Finds all files that match a given mask in a given directory.
+Index: drupal7/includes/form.inc
+===================================================================
+--- drupal7.orig/includes/form.inc
++++ drupal7/includes/form.inc
+@@ -2704,7 +2704,7 @@ function form_select_options($element, $
+   $options = '';
+   foreach ($choices as $key => $choice) {
+     if (is_array($choice)) {
+-      $options .= '<optgroup label="' . $key . '">';
++      $options .= '<optgroup label="' . check_plain($key) . '">';
+       $options .= form_select_options($element, $choice);
+       $options .= '</optgroup>';
+     }
+Index: drupal7/misc/ajax.js
+===================================================================
+--- drupal7.orig/misc/ajax.js
++++ drupal7/misc/ajax.js
+@@ -348,7 +348,7 @@ Drupal.ajax.prototype.beforeSend = funct
+     // this is only needed for IFRAME submissions.
+     var v = $.fieldValue(this.element);
+     if (v !== null) {
+-      options.extraData[this.element.name] = v;
++      options.extraData[this.element.name] = Drupal.checkPlain(v);
+     }
+   }
+
+Index: drupal7/modules/file/file.module
+===================================================================
+--- drupal7.orig/modules/file/file.module
++++ drupal7/modules/file/file.module
+@@ -510,8 +510,9 @@ function file_managed_file_value(&$eleme
+           $callback($element, $input, $form_state);
+         }
+       }
+-      // Load file if the FID has changed to confirm it exists.
+-      if (isset($input['fid']) && $file = file_load($input['fid'])) {
++      // Load file and check access if the FID has changed, to confirm it
++      // exists and that the current user has access to it.
++      if (isset($input['fid']) && ($file = file_load($input['fid'])) && 
file_download_access($file->uri)) {
+         $fid = $file->fid;
+       }
+     }
+Index: drupal7/modules/file/tests/file.test
+===================================================================
+--- drupal7.orig/modules/file/tests/file.test
++++ drupal7/modules/file/tests/file.test
+@@ -1167,5 +1167,18 @@ class FilePrivateTestCase extends FileFi
+     // Ensure the file cannot be downloaded.
+     $this->drupalGet(file_create_url($node_file->uri));
+     $this->assertResponse(403, t('Confirmed that access is denied for the 
file without view field access permission.'));
++
++    // Attempt to reuse the existing file when creating a new node, and 
confirm
++    // that access is still denied.
++    $edit = array();
++    $edit['title'] = $this->randomName(8);
++    $edit[$field_name . '[' . LANGUAGE_NONE . '][0][fid]'] = $node_file->fid;
++    $this->drupalPost('node/add/page', $edit, t('Save'));
++    $new_node = $this->drupalGetNodeByTitle($edit['title']);
++    $this->assertTrue(!empty($new_node), 'Node was created.');
++    $this->assertUrl('node/' . $new_node->nid);
++    $this->assertNoRaw($node_file->filename, 'File without view field access 
permission does not appear after attempting to attach it to a new node.');
++    $this->drupalGet(file_create_url($node_file->uri));
++    $this->assertResponse(403, 'Confirmed that access is denied for the file 
without view field access permission after attempting to attach it to a new 
node.');
+   }
+ }
+Index: drupal7/modules/simpletest/tests/bootstrap.test
+===================================================================
+--- drupal7.orig/modules/simpletest/tests/bootstrap.test
++++ drupal7/modules/simpletest/tests/bootstrap.test
+@@ -93,6 +93,11 @@ class BootstrapIPAddressTestCase extends
+     $this->assertFalse(drupal_valid_http_host('security\\.drupal.org:80'), 
t('HTTP_HOST with \\ is invalid'));
+     $this->assertFalse(drupal_valid_http_host('security<.drupal.org:80'), 
t('HTTP_HOST with &lt; is invalid'));
+     $this->assertFalse(drupal_valid_http_host('security..drupal.org:80'), 
t('HTTP_HOST with .. is invalid'));
++    // Verifies that host names are shorter than 1000 characters.
++    $this->assertFalse(drupal_valid_http_host(str_repeat('x', 1001)), 
'HTTP_HOST with more than 1000 characters is invalid.');
++    $this->assertFalse(drupal_valid_http_host(str_repeat('.', 101)), 
'HTTP_HOST with more than 100 subdomains is invalid.');
++    $this->assertFalse(drupal_valid_http_host(str_repeat(':', 101)), 
'HTTP_HOST with more than 100 portseparators is invalid.');
++
+     // IPv6 loopback address
+     $this->assertTrue(drupal_valid_http_host('[::1]:80'), t('HTTP_HOST 
containing IPv6 loopback is valid'));
+   }
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to