PageRenderTime 53ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/Administration/UpgradeAccess.php

https://bitbucket.org/cviolette/sugarcrm
PHP | 136 lines | 73 code | 20 blank | 43 comment | 19 complexity | 0580583a2de5dad3606486ed8c7bbd3e MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. <?php
  2. if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
  3. /*********************************************************************************
  4. * SugarCRM Community Edition is a customer relationship management program developed by
  5. * SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
  6. *
  7. * This program is free software; you can redistribute it and/or modify it under
  8. * the terms of the GNU Affero General Public License version 3 as published by the
  9. * Free Software Foundation with the addition of the following permission added
  10. * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
  11. * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
  12. * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  13. *
  14. * This program is distributed in the hope that it will be useful, but WITHOUT
  15. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  16. * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  17. * details.
  18. *
  19. * You should have received a copy of the GNU Affero General Public License along with
  20. * this program; if not, see http://www.gnu.org/licenses or write to the Free
  21. * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  22. * 02110-1301 USA.
  23. *
  24. * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
  25. * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
  26. *
  27. * The interactive user interfaces in modified source and object code versions
  28. * of this program must display Appropriate Legal Notices, as required under
  29. * Section 5 of the GNU Affero General Public License version 3.
  30. *
  31. * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
  32. * these Appropriate Legal Notices must retain the display of the "Powered by
  33. * SugarCRM" logo. If the display of the logo is not reasonably feasible for
  34. * technical reasons, the Appropriate Legal Notices must display the words
  35. * "Powered by SugarCRM".
  36. ********************************************************************************/
  37. global $mod_strings;
  38. global $sugar_config;
  39. $ignoreCase = (substr_count(strtolower($_SERVER['SERVER_SOFTWARE']), 'apache/2') > 0)?'(?i)':'';
  40. $htaccess_file = getcwd() . "/.htaccess";
  41. $contents = '';
  42. $restrict_str = <<<EOQ
  43. # BEGIN SUGARCRM RESTRICTIONS
  44. RedirectMatch 403 {$ignoreCase}.*\.log$
  45. RedirectMatch 403 {$ignoreCase}/+not_imported_.*\.txt
  46. RedirectMatch 403 {$ignoreCase}/+(soap|cache|xtemplate|data|examples|include|log4php|metadata|modules)/+.*\.(php|tpl)
  47. RedirectMatch 403 {$ignoreCase}/+emailmandelivery\.php
  48. RedirectMatch 403 {$ignoreCase}/+upload
  49. RedirectMatch 403 {$ignoreCase}/+cache/+diagnostic
  50. RedirectMatch 403 {$ignoreCase}/+files\.md5\$
  51. # END SUGARCRM RESTRICTIONS
  52. EOQ;
  53. if(file_exists($htaccess_file)){
  54. $fp = fopen($htaccess_file, 'r');
  55. $skip = false;
  56. while($line = fgets($fp)){
  57. if(preg_match('/\s*#\s*BEGIN\s*SUGARCRM\s*RESTRICTIONS/i', $line))$skip = true;
  58. if(!$skip)$contents .= $line;
  59. if(preg_match('/\s*#\s*END\s*SUGARCRM\s*RESTRICTIONS/i', $line))$skip = false;
  60. }
  61. }
  62. if(substr($contents, -1) != "\n") {
  63. $restrict_str = "\n".$restrict_str;
  64. }
  65. $status = file_put_contents($htaccess_file, $contents . $restrict_str);
  66. if( !$status ){
  67. echo '<p>' . $mod_strings['LBL_HT_NO_WRITE'] . "<span class=stop>{$htaccess_file}</span></p>\n";
  68. echo '<p>' . $mod_strings['LBL_HT_NO_WRITE_2'] . "</p>\n";
  69. echo "{$redirect_str}\n";
  70. }
  71. // cn: bug 9365 - security for filesystem
  72. $uploadDir='';
  73. $uploadHta='';
  74. if (empty($GLOBALS['sugar_config']['upload_dir'])) {
  75. $GLOBALS['sugar_config']['upload_dir']='upload/';
  76. }
  77. $uploadHta = "upload://.htaccess";
  78. $denyAll =<<<eoq
  79. Order Deny,Allow
  80. Deny from all
  81. eoq;
  82. if(file_exists($uploadHta) && filesize($uploadHta)) {
  83. // file exists, parse to make sure it is current
  84. if(is_writable($uploadHta)) {
  85. $oldHtaccess = file_get_contents($uploadHta);
  86. // use a different regex boundary b/c .htaccess uses the typicals
  87. if(strstr($oldHtaccess, $denyAll) === false) {
  88. $oldHtaccess .= "\n";
  89. $oldHtaccess .= $denyAll;
  90. }
  91. if(!file_put_contents($uploadHta, $oldHtaccess)) {
  92. $htaccess_failed = true;
  93. }
  94. } else {
  95. $htaccess_failed = true;
  96. }
  97. } else {
  98. // no .htaccess yet, create a fill
  99. if(!file_put_contents($uploadHta, $denyAll)) {
  100. $htaccess_failed = true;
  101. }
  102. }
  103. include('modules/Versions/ExpectedVersions.php');
  104. global $expect_versions;
  105. if (isset($expect_versions['htaccess'])) {
  106. $version = new Version();
  107. $version->retrieve_by_string_fields(array('name'=>'htaccess'));
  108. $version->name = $expect_versions['htaccess']['name'];
  109. $version->file_version = $expect_versions['htaccess']['file_version'];
  110. $version->db_version = $expect_versions['htaccess']['db_version'];
  111. $version->save();
  112. }
  113. /* Commenting out as this shows on upgrade screen
  114. * echo "\n" . $mod_strings['LBL_HT_DONE']. "<br />\n";
  115. */
  116. ?>