From 9460b10bbf19b8f36cc9386fd69c0c996d8937e9 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Wed, 30 Oct 2024 13:16:15 +0100 Subject: [PATCH 01/11] Changing file permissions --- administrator/language/en-GB/plg_schemaorg_blogposting.ini | 0 administrator/language/en-GB/plg_schemaorg_blogposting.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_book.ini | 0 administrator/language/en-GB/plg_schemaorg_book.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_custom.ini | 0 administrator/language/en-GB/plg_schemaorg_custom.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_event.ini | 0 administrator/language/en-GB/plg_schemaorg_event.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_jobposting.ini | 0 administrator/language/en-GB/plg_schemaorg_jobposting.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_organization.ini | 0 administrator/language/en-GB/plg_schemaorg_organization.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_person.ini | 0 administrator/language/en-GB/plg_schemaorg_person.sys.ini | 0 administrator/language/en-GB/plg_schemaorg_recipe.ini | 0 administrator/language/en-GB/plg_schemaorg_recipe.sys.ini | 0 administrator/language/en-GB/plg_system_schemaorg.ini | 0 administrator/language/en-GB/plg_system_schemaorg.sys.ini | 0 libraries/src/Form/Field/SchemaorgComponentSectionsField.php | 0 libraries/src/Schemaorg/SchemaorgPluginTrait.php | 0 libraries/src/Schemaorg/SchemaorgServiceInterface.php | 0 libraries/src/Schemaorg/SchemaorgServiceTrait.php | 0 plugins/schemaorg/blogposting/blogposting.xml | 0 plugins/schemaorg/blogposting/forms/schemaorg.xml | 0 plugins/schemaorg/blogposting/src/Extension/BlogPosting.php | 0 plugins/schemaorg/book/book.xml | 0 plugins/schemaorg/book/forms/schemaorg.xml | 0 plugins/schemaorg/book/src/Extension/Book.php | 0 plugins/schemaorg/custom/custom.xml | 0 plugins/schemaorg/custom/forms/schemaorg.xml | 0 plugins/schemaorg/custom/src/Extension/Custom.php | 0 plugins/schemaorg/event/event.xml | 0 plugins/schemaorg/event/forms/schemaorg.xml | 0 plugins/schemaorg/event/src/Extension/Event.php | 0 plugins/schemaorg/jobposting/forms/schemaorg.xml | 0 plugins/schemaorg/jobposting/jobposting.xml | 0 plugins/schemaorg/jobposting/src/Extension/JobPosting.php | 0 plugins/schemaorg/organization/forms/schemaorg.xml | 0 plugins/schemaorg/organization/organization.xml | 0 plugins/schemaorg/organization/src/Extension/Organization.php | 0 plugins/schemaorg/person/forms/schemaorg.xml | 0 plugins/schemaorg/person/person.xml | 0 plugins/schemaorg/person/src/Extension/Person.php | 0 plugins/schemaorg/recipe/forms/duration.xml | 0 plugins/schemaorg/recipe/forms/schemaorg.xml | 0 plugins/schemaorg/recipe/recipe.xml | 0 plugins/schemaorg/recipe/src/Extension/Recipe.php | 0 plugins/system/schemaorg/forms/schemaorg.xml | 0 plugins/system/schemaorg/schemaorg.xml | 0 49 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_blogposting.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_blogposting.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_book.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_book.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_custom.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_custom.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_event.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_event.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_jobposting.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_jobposting.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_organization.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_organization.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_person.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_person.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_recipe.ini mode change 100755 => 100644 administrator/language/en-GB/plg_schemaorg_recipe.sys.ini mode change 100755 => 100644 administrator/language/en-GB/plg_system_schemaorg.ini mode change 100755 => 100644 administrator/language/en-GB/plg_system_schemaorg.sys.ini mode change 100755 => 100644 libraries/src/Form/Field/SchemaorgComponentSectionsField.php mode change 100755 => 100644 libraries/src/Schemaorg/SchemaorgPluginTrait.php mode change 100755 => 100644 libraries/src/Schemaorg/SchemaorgServiceInterface.php mode change 100755 => 100644 libraries/src/Schemaorg/SchemaorgServiceTrait.php mode change 100755 => 100644 plugins/schemaorg/blogposting/blogposting.xml mode change 100755 => 100644 plugins/schemaorg/blogposting/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/blogposting/src/Extension/BlogPosting.php mode change 100755 => 100644 plugins/schemaorg/book/book.xml mode change 100755 => 100644 plugins/schemaorg/book/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/book/src/Extension/Book.php mode change 100755 => 100644 plugins/schemaorg/custom/custom.xml mode change 100755 => 100644 plugins/schemaorg/custom/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/custom/src/Extension/Custom.php mode change 100755 => 100644 plugins/schemaorg/event/event.xml mode change 100755 => 100644 plugins/schemaorg/event/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/event/src/Extension/Event.php mode change 100755 => 100644 plugins/schemaorg/jobposting/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/jobposting/jobposting.xml mode change 100755 => 100644 plugins/schemaorg/jobposting/src/Extension/JobPosting.php mode change 100755 => 100644 plugins/schemaorg/organization/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/organization/organization.xml mode change 100755 => 100644 plugins/schemaorg/organization/src/Extension/Organization.php mode change 100755 => 100644 plugins/schemaorg/person/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/person/person.xml mode change 100755 => 100644 plugins/schemaorg/person/src/Extension/Person.php mode change 100755 => 100644 plugins/schemaorg/recipe/forms/duration.xml mode change 100755 => 100644 plugins/schemaorg/recipe/forms/schemaorg.xml mode change 100755 => 100644 plugins/schemaorg/recipe/recipe.xml mode change 100755 => 100644 plugins/schemaorg/recipe/src/Extension/Recipe.php mode change 100755 => 100644 plugins/system/schemaorg/forms/schemaorg.xml mode change 100755 => 100644 plugins/system/schemaorg/schemaorg.xml diff --git a/administrator/language/en-GB/plg_schemaorg_blogposting.ini b/administrator/language/en-GB/plg_schemaorg_blogposting.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_blogposting.sys.ini b/administrator/language/en-GB/plg_schemaorg_blogposting.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_book.ini b/administrator/language/en-GB/plg_schemaorg_book.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_book.sys.ini b/administrator/language/en-GB/plg_schemaorg_book.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_custom.ini b/administrator/language/en-GB/plg_schemaorg_custom.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_custom.sys.ini b/administrator/language/en-GB/plg_schemaorg_custom.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_event.ini b/administrator/language/en-GB/plg_schemaorg_event.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_event.sys.ini b/administrator/language/en-GB/plg_schemaorg_event.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_jobposting.ini b/administrator/language/en-GB/plg_schemaorg_jobposting.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_jobposting.sys.ini b/administrator/language/en-GB/plg_schemaorg_jobposting.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_organization.ini b/administrator/language/en-GB/plg_schemaorg_organization.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_organization.sys.ini b/administrator/language/en-GB/plg_schemaorg_organization.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_person.ini b/administrator/language/en-GB/plg_schemaorg_person.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_person.sys.ini b/administrator/language/en-GB/plg_schemaorg_person.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_recipe.ini b/administrator/language/en-GB/plg_schemaorg_recipe.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_schemaorg_recipe.sys.ini b/administrator/language/en-GB/plg_schemaorg_recipe.sys.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_system_schemaorg.ini b/administrator/language/en-GB/plg_system_schemaorg.ini old mode 100755 new mode 100644 diff --git a/administrator/language/en-GB/plg_system_schemaorg.sys.ini b/administrator/language/en-GB/plg_system_schemaorg.sys.ini old mode 100755 new mode 100644 diff --git a/libraries/src/Form/Field/SchemaorgComponentSectionsField.php b/libraries/src/Form/Field/SchemaorgComponentSectionsField.php old mode 100755 new mode 100644 diff --git a/libraries/src/Schemaorg/SchemaorgPluginTrait.php b/libraries/src/Schemaorg/SchemaorgPluginTrait.php old mode 100755 new mode 100644 diff --git a/libraries/src/Schemaorg/SchemaorgServiceInterface.php b/libraries/src/Schemaorg/SchemaorgServiceInterface.php old mode 100755 new mode 100644 diff --git a/libraries/src/Schemaorg/SchemaorgServiceTrait.php b/libraries/src/Schemaorg/SchemaorgServiceTrait.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/blogposting/blogposting.xml b/plugins/schemaorg/blogposting/blogposting.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/blogposting/forms/schemaorg.xml b/plugins/schemaorg/blogposting/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/blogposting/src/Extension/BlogPosting.php b/plugins/schemaorg/blogposting/src/Extension/BlogPosting.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/book/book.xml b/plugins/schemaorg/book/book.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/book/forms/schemaorg.xml b/plugins/schemaorg/book/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/book/src/Extension/Book.php b/plugins/schemaorg/book/src/Extension/Book.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/custom/custom.xml b/plugins/schemaorg/custom/custom.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/custom/forms/schemaorg.xml b/plugins/schemaorg/custom/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/custom/src/Extension/Custom.php b/plugins/schemaorg/custom/src/Extension/Custom.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/event/event.xml b/plugins/schemaorg/event/event.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/event/forms/schemaorg.xml b/plugins/schemaorg/event/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/event/src/Extension/Event.php b/plugins/schemaorg/event/src/Extension/Event.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/jobposting/forms/schemaorg.xml b/plugins/schemaorg/jobposting/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/jobposting/jobposting.xml b/plugins/schemaorg/jobposting/jobposting.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/jobposting/src/Extension/JobPosting.php b/plugins/schemaorg/jobposting/src/Extension/JobPosting.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/organization/forms/schemaorg.xml b/plugins/schemaorg/organization/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/organization/organization.xml b/plugins/schemaorg/organization/organization.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/organization/src/Extension/Organization.php b/plugins/schemaorg/organization/src/Extension/Organization.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/person/forms/schemaorg.xml b/plugins/schemaorg/person/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/person/person.xml b/plugins/schemaorg/person/person.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/person/src/Extension/Person.php b/plugins/schemaorg/person/src/Extension/Person.php old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/recipe/forms/duration.xml b/plugins/schemaorg/recipe/forms/duration.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/recipe/forms/schemaorg.xml b/plugins/schemaorg/recipe/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/recipe/recipe.xml b/plugins/schemaorg/recipe/recipe.xml old mode 100755 new mode 100644 diff --git a/plugins/schemaorg/recipe/src/Extension/Recipe.php b/plugins/schemaorg/recipe/src/Extension/Recipe.php old mode 100755 new mode 100644 diff --git a/plugins/system/schemaorg/forms/schemaorg.xml b/plugins/system/schemaorg/forms/schemaorg.xml old mode 100755 new mode 100644 diff --git a/plugins/system/schemaorg/schemaorg.xml b/plugins/system/schemaorg/schemaorg.xml old mode 100755 new mode 100644 From 0084fbbdddb7232aede5c9b5d29568d49ccbf650 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Fri, 1 Nov 2024 01:06:01 +0100 Subject: [PATCH 02/11] Add method to fix permissions to script.php --- administrator/components/com_admin/script.php | 402 ++++++++++++++++++ 1 file changed, 402 insertions(+) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 035103d764dc9..b66d6a14c3950 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -2658,6 +2658,13 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) $this->fixFilenameCasing(); + /** + * Fix filesystem permissions when updating a new 5.2.0 installation. + * + * @todo: Remove in 6.0 + */ + $this->fixFilesystemPermissions(); + if ($suppressOutput === false && \count($status['folders_errors'])) { echo implode('
', $status['folders_errors']); } @@ -3145,4 +3152,399 @@ protected function fixFilenameCasing() } } } + + /** + * Fix filesystem permissions when updating a new 5.2.0 installation. + * + * @return void + * + * @since __DEPLOY_VERSION__ + * + * @todo 6.0 Remove this method + * + * @deprecated __DEPLOY_VERSION__ will be removed in 6.0 without replacement + */ + protected function fixFilesystemPermissions() + { + // Don't do anything when not updating from a 5.2.0 which was a new installation + if ( + empty($this->fromVersion) + || version_compare($this->fromVersion, '5.2.0', 'ne') + || ( + is_file(JPATH_ROOT . '/administrator/logs/joomla_update.php') + && (time() - filectime(JPATH_ROOT . '/administrator/logs/joomla_update.php') > 3600) + ) + ) { + return; + } + + $files = [ + '/administrator/logs/index.html', + '/images/banners/banner.jpg', + '/images/banners/osmbanner1.png', + '/images/banners/osmbanner2.png', + '/images/banners/shop-ad-books.jpg', + '/images/banners/shop-ad.jpg', + '/images/banners/white.png', + '/images/headers/blue-flower.jpg', + '/images/headers/maple.jpg', + '/images/headers/raindrops.jpg', + '/images/headers/walden-pond.jpg', + '/images/headers/windows.jpg', + '/images/joomla_black.png', + '/images/powered_by.png', + '/images/sampledata/cassiopeia/nasa1-1200.jpg', + '/images/sampledata/cassiopeia/nasa1-400.jpg', + '/images/sampledata/cassiopeia/nasa1-640.jpg', + '/images/sampledata/cassiopeia/nasa2-1200.jpg', + '/images/sampledata/cassiopeia/nasa2-400.jpg', + '/images/sampledata/cassiopeia/nasa2-640.jpg', + '/images/sampledata/cassiopeia/nasa3-1200.jpg', + '/images/sampledata/cassiopeia/nasa3-400.jpg', + '/images/sampledata/cassiopeia/nasa3-640.jpg', + '/images/sampledata/cassiopeia/nasa4-1200.jpg', + '/images/sampledata/cassiopeia/nasa4-400.jpg', + '/images/sampledata/cassiopeia/nasa5-400.jpg', + '/robots.txt', + ]; + + $folders = [ + '/administrator', + '/administrator/cache', + '/administrator/components', + '/administrator/help', + '/administrator/help/en-GB', + '/administrator/includes', + '/administrator/language', + '/administrator/language/en-GB', + '/administrator/language/overrides', + '/administrator/logs', + '/administrator/manifests', + '/administrator/manifests/files', + '/administrator/manifests/libraries', + '/administrator/manifests/packages', + '/administrator/modules', + '/administrator/templates', + '/api', + '/api/components', + '/api/includes', + '/api/language', + '/api/language/en-GB', + '/cache', + '/cli', + '/components', + '/images', + '/images/banners', + '/images/headers', + '/images/sampledata', + '/images/sampledata/cassiopeia', + '/includes', + '/language', + '/language/en-GB', + '/language/overrides', + '/layouts', + '/layouts/chromes', + '/layouts/libraries', + '/layouts/libraries/html', + '/layouts/libraries/html/bootstrap', + '/layouts/libraries/html/bootstrap/modal', + '/layouts/libraries/html/bootstrap/tab', + '/libraries', + '/libraries/php-encryption', + '/libraries/phpass', + '/media', + '/media/cache', + '/media/templates', + '/media/templates/administrator', + '/media/templates/site', + '/media/vendor', + '/modules', + '/plugins', + '/templates', + '/tmp', + ]; + + $foldersRecursive = [ + '/administrator/components/com_actionlogs', + '/administrator/components/com_admin', + '/administrator/components/com_ajax', + '/administrator/components/com_associations', + '/administrator/components/com_banners', + '/administrator/components/com_cache', + '/administrator/components/com_categories', + '/administrator/components/com_checkin', + '/administrator/components/com_config', + '/administrator/components/com_contact', + '/administrator/components/com_content', + '/administrator/components/com_contenthistory', + '/administrator/components/com_cpanel', + '/administrator/components/com_fields', + '/administrator/components/com_finder', + '/administrator/components/com_guidedtours', + '/administrator/components/com_installer', + '/administrator/components/com_joomlaupdate', + '/administrator/components/com_languages', + '/administrator/components/com_login', + '/administrator/components/com_mails', + '/administrator/components/com_media', + '/administrator/components/com_menus', + '/administrator/components/com_messages', + '/administrator/components/com_modules', + '/administrator/components/com_newsfeeds', + '/administrator/components/com_plugins', + '/administrator/components/com_postinstall', + '/administrator/components/com_privacy', + '/administrator/components/com_redirect', + '/administrator/components/com_scheduler', + '/administrator/components/com_tags', + '/administrator/components/com_templates', + '/administrator/components/com_users', + '/administrator/components/com_workflow', + '/administrator/components/com_wrapper', + '/administrator/modules/mod_custom', + '/administrator/modules/mod_feed', + '/administrator/modules/mod_frontend', + '/administrator/modules/mod_guidedtours', + '/administrator/modules/mod_latest', + '/administrator/modules/mod_latestactions', + '/administrator/modules/mod_logged', + '/administrator/modules/mod_login', + '/administrator/modules/mod_loginsupport', + '/administrator/modules/mod_menu', + '/administrator/modules/mod_messages', + '/administrator/modules/mod_multilangstatus', + '/administrator/modules/mod_popular', + '/administrator/modules/mod_post_installation_messages', + '/administrator/modules/mod_privacy_dashboard', + '/administrator/modules/mod_privacy_status', + '/administrator/modules/mod_quickicon', + '/administrator/modules/mod_sampledata', + '/administrator/modules/mod_stats_admin', + '/administrator/modules/mod_submenu', + '/administrator/modules/mod_title', + '/administrator/modules/mod_toolbar', + '/administrator/modules/mod_user', + '/administrator/modules/mod_version', + '/administrator/templates/atum', + '/administrator/templates/system', + '/api/components/com_banners', + '/api/components/com_categories', + '/api/components/com_config', + '/api/components/com_contact', + '/api/components/com_content', + '/api/components/com_contenthistory', + '/api/components/com_fields', + '/api/components/com_installer', + '/api/components/com_languages', + '/api/components/com_media', + '/api/components/com_menus', + '/api/components/com_messages', + '/api/components/com_modules', + '/api/components/com_newsfeeds', + '/api/components/com_plugins', + '/api/components/com_privacy', + '/api/components/com_redirect', + '/api/components/com_tags', + '/api/components/com_templates', + '/api/components/com_users', + '/components/com_ajax', + '/components/com_banners', + '/components/com_config', + '/components/com_contact', + '/components/com_content', + '/components/com_contenthistory', + '/components/com_fields', + '/components/com_finder', + '/components/com_media', + '/components/com_menus', + '/components/com_modules', + '/components/com_newsfeeds', + '/components/com_privacy', + '/components/com_tags', + '/components/com_users', + '/components/com_wrapper', + '/layouts/joomla', + '/layouts/plugins', + '/libraries/src', + '/libraries/vendor', + '/media/com_actionlogs', + '/media/com_admin', + '/media/com_associations', + '/media/com_banners', + '/media/com_cache', + '/media/com_categories', + '/media/com_config', + '/media/com_contact', + '/media/com_content', + '/media/com_contenthistory', + '/media/com_cpanel', + '/media/com_fields', + '/media/com_finder', + '/media/com_guidedtours', + '/media/com_installer', + '/media/com_joomlaupdate', + '/media/com_languages', + '/media/com_mails', + '/media/com_media', + '/media/com_menus', + '/media/com_modules', + '/media/com_scheduler', + '/media/com_tags', + '/media/com_templates', + '/media/com_users', + '/media/com_workflow', + '/media/com_wrapper', + '/media/layouts', + '/media/legacy', + '/media/mailto', + '/media/mod_articles', + '/media/mod_articles_news', + '/media/mod_languages', + '/media/mod_login', + '/media/mod_menu', + '/media/mod_quickicon', + '/media/mod_sampledata', + '/media/plg_behaviour_compat', + '/media/plg_captcha_recaptcha', + '/media/plg_captcha_recaptcha_invisible', + '/media/plg_content_vote', + '/media/plg_editors-xtd_image', + '/media/plg_editors_codemirror', + '/media/plg_editors_none', + '/media/plg_editors_tinymce', + '/media/plg_installer_folderinstaller', + '/media/plg_installer_packageinstaller', + '/media/plg_installer_urlinstaller', + '/media/plg_installer_webinstaller', + '/media/plg_media-action_crop', + '/media/plg_media-action_resize', + '/media/plg_media-action_rotate', + '/media/plg_multifactorauth_email', + '/media/plg_multifactorauth_fixed', + '/media/plg_multifactorauth_totp', + '/media/plg_multifactorauth_webauthn', + '/media/plg_multifactorauth_yubikey', + '/media/plg_quickicon_eos', + '/media/plg_quickicon_extensionupdate', + '/media/plg_quickicon_joomlaupdate', + '/media/plg_quickicon_overridecheck', + '/media/plg_quickicon_privacycheck', + '/media/plg_system_debug', + '/media/plg_system_guidedtours', + '/media/plg_system_jooa11y', + '/media/plg_system_schedulerunner', + '/media/plg_system_shortcut', + '/media/plg_system_stats', + '/media/plg_system_webauthn', + '/media/plg_user_token', + '/media/system', + '/media/templates/administrator/atum', + '/media/templates/site/cassiopeia', + '/media/vendor/accessibility', + '/media/vendor/awesomplete', + '/media/vendor/bootstrap', + '/media/vendor/choicesjs', + '/media/vendor/chosen', + '/media/vendor/codemirror', + '/media/vendor/cropperjs', + '/media/vendor/debugbar', + '/media/vendor/diff', + '/media/vendor/dragula', + '/media/vendor/es-module-shims', + '/media/vendor/focus-visible', + '/media/vendor/fontawesome-free', + '/media/vendor/hotkeysjs', + '/media/vendor/joomla-custom-elements', + '/media/vendor/jquery', + '/media/vendor/jquery-migrate', + '/media/vendor/mediaelement', + '/media/vendor/metismenujs', + '/media/vendor/minicolors', + '/media/vendor/qrcode', + '/media/vendor/roboto-fontface', + '/media/vendor/sa11y', + '/media/vendor/shepherdjs', + '/media/vendor/short-and-sweet', + '/media/vendor/skipto', + '/media/vendor/tinymce', + '/media/vendor/webcomponentsjs', + '/modules/mod_articles', + '/modules/mod_articles_archive', + '/modules/mod_articles_categories', + '/modules/mod_articles_category', + '/modules/mod_articles_latest', + '/modules/mod_articles_news', + '/modules/mod_articles_popular', + '/modules/mod_banners', + '/modules/mod_breadcrumbs', + '/modules/mod_custom', + '/modules/mod_feed', + '/modules/mod_finder', + '/modules/mod_footer', + '/modules/mod_languages', + '/modules/mod_login', + '/modules/mod_menu', + '/modules/mod_random_image', + '/modules/mod_related_items', + '/modules/mod_stats', + '/modules/mod_syndicate', + '/modules/mod_tags_popular', + '/modules/mod_tags_similar', + '/modules/mod_users_latest', + '/modules/mod_whosonline', + '/modules/mod_wrapper', + '/plugins/actionlog', + '/plugins/api-authentication', + '/plugins/authentication', + '/plugins/behaviour', + '/plugins/captcha', + '/plugins/content', + '/plugins/editors', + '/plugins/editors-xtd', + '/plugins/extension', + '/plugins/fields', + '/plugins/filesystem', + '/plugins/finder', + '/plugins/installer', + '/plugins/media-action', + '/plugins/multifactorauth', + '/plugins/privacy', + '/plugins/quickicon', + '/plugins/sampledata', + '/plugins/schemaorg', + '/plugins/system', + '/plugins/task', + '/plugins/user', + '/plugins/webservices', + '/plugins/workflow', + '/templates/cassiopeia', + '/templates/system', + ]; + + foreach ($files as $file) { + if (is_file(JPATH_ROOT . $file) && decoct(fileperms(JPATH_ROOT . $file) & 0777) === '777') { + @chmod(JPATH_ROOT . $file, 0644); + } + } + + foreach ($folders as $folder) { + if (is_dir(JPATH_ROOT . $folder) && decoct(fileperms(JPATH_ROOT . $folder) & 0777) === '777') { + @chmod(JPATH_ROOT . $folder, 0755); + } + } + + foreach ($foldersRecursive as $parentFolder) { + if (is_dir(JPATH_ROOT . $parentFolder)) { + if (decoct(fileperms(JPATH_ROOT . $parentFolder) & 0777) === '777') { + @chmod(JPATH_ROOT . $parentFolder, 0755); + } + + foreach (Folder::folders(JPATH_ROOT . $parentFolder, '.', true, true) as $folder) { + if (decoct(fileperms($folder) & 0777) === '777') { + @chmod($folder, 0755); + } + } + } + } + } } From c66a7fec072c6bbcef16c71071c5bd7a7194eb0a Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sat, 2 Nov 2024 16:24:05 +0100 Subject: [PATCH 03/11] Add check and early return for Windows --- administrator/components/com_admin/script.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index b66d6a14c3950..f48a5dd4611d3 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3178,6 +3178,18 @@ protected function fixFilesystemPermissions() return; } + // First check tmp folder if it has mode 777 + if (decoct(fileperms(JPATH_ROOT . '/tmp') & 0777) === '777') { + // We are either on Windows where folders always have 777, or we have to fix permissions + @chmod(JPATH_ROOT . $folder, 0755); + } + + // Check tmp folder again if it still has mode 777 + if (decoct(fileperms(JPATH_ROOT . '/tmp') & 0777) === '777') { + // We are on Windows or chmod has no effect + return; + } + $files = [ '/administrator/logs/index.html', '/images/banners/banner.jpg', From bb08092900b649155a43c187c9110ebea9544425 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sat, 2 Nov 2024 16:27:19 +0100 Subject: [PATCH 04/11] Remove tmp folder because already checked --- administrator/components/com_admin/script.php | 1 - 1 file changed, 1 deletion(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index f48a5dd4611d3..06ed62eafd9c7 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3273,7 +3273,6 @@ protected function fixFilesystemPermissions() '/modules', '/plugins', '/templates', - '/tmp', ]; $foldersRecursive = [ From 855723a7731caf69b3e4eafb8952df7646f514db Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sat, 2 Nov 2024 17:13:18 +0100 Subject: [PATCH 05/11] Fix copy paste error --- administrator/components/com_admin/script.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 06ed62eafd9c7..84e73744b39d4 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3181,7 +3181,7 @@ protected function fixFilesystemPermissions() // First check tmp folder if it has mode 777 if (decoct(fileperms(JPATH_ROOT . '/tmp') & 0777) === '777') { // We are either on Windows where folders always have 777, or we have to fix permissions - @chmod(JPATH_ROOT . $folder, 0755); + @chmod(JPATH_ROOT . '/tmp', 0755); } // Check tmp folder again if it still has mode 777 From 1d52256286a931b8449c5b33e0bb80b356fece8c Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sat, 2 Nov 2024 17:21:57 +0100 Subject: [PATCH 06/11] Make sure not to check cached file info later --- administrator/components/com_admin/script.php | 1 + 1 file changed, 1 insertion(+) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 84e73744b39d4..3dd196aa47fc9 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3182,6 +3182,7 @@ protected function fixFilesystemPermissions() if (decoct(fileperms(JPATH_ROOT . '/tmp') & 0777) === '777') { // We are either on Windows where folders always have 777, or we have to fix permissions @chmod(JPATH_ROOT . '/tmp', 0755); + clearstatcache(true, JPATH_ROOT . '/tmp'); } // Check tmp folder again if it still has mode 777 From fa10805dd058247a13cd164c53ad3c8dd331ae25 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sun, 3 Nov 2024 10:59:20 +0100 Subject: [PATCH 07/11] Add log entry to see if permissions fix runs --- administrator/components/com_admin/script.php | 6 ++++++ administrator/language/en-GB/com_joomlaupdate.ini | 1 + 2 files changed, 7 insertions(+) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 3dd196aa47fc9..1096d222abeed 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3191,6 +3191,12 @@ protected function fixFilesystemPermissions() return; } + try { + Log::add(Text::_('COM_JOOMLAUPDATE_UPDATE_LOG_FIX_PERMISSIONS'), Log::INFO, 'Update'); + } catch (\RuntimeException $exception) { + // Informational log only + } + $files = [ '/administrator/logs/index.html', '/images/banners/banner.jpg', diff --git a/administrator/language/en-GB/com_joomlaupdate.ini b/administrator/language/en-GB/com_joomlaupdate.ini index 66daf5ab8fdb9..3b59c0ccf57b6 100644 --- a/administrator/language/en-GB/com_joomlaupdate.ini +++ b/administrator/language/en-GB/com_joomlaupdate.ini @@ -80,6 +80,7 @@ COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE="Update to version %s is complete." COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES="Deleting removed files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_FILE="File %s downloaded." COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE="Finalising installation." +COM_JOOMLAUPDATE_UPDATE_LOG_FIX_PERMISSIONS="Fixing permissions for files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_INSTALL="Starting installation of new version." COM_JOOMLAUPDATE_UPDATE_LOG_START="Update started by user %2$s (%1$s). Old version is %3$s." COM_JOOMLAUPDATE_UPDATE_LOG_UNINSTALL_EXTENSIONS="Uninstalling extensions" From 6d686ee5ad6bd4999d8e0e4b5e56e300d717698e Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sun, 3 Nov 2024 11:19:18 +0100 Subject: [PATCH 08/11] Deprecate language string --- administrator/language/en-GB/com_joomlaupdate.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/administrator/language/en-GB/com_joomlaupdate.ini b/administrator/language/en-GB/com_joomlaupdate.ini index 3b59c0ccf57b6..562e226b88814 100644 --- a/administrator/language/en-GB/com_joomlaupdate.ini +++ b/administrator/language/en-GB/com_joomlaupdate.ini @@ -80,6 +80,7 @@ COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE="Update to version %s is complete." COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES="Deleting removed files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_FILE="File %s downloaded." COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE="Finalising installation." +; Deprecated, will be removed with 6.0 COM_JOOMLAUPDATE_UPDATE_LOG_FIX_PERMISSIONS="Fixing permissions for files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_INSTALL="Starting installation of new version." COM_JOOMLAUPDATE_UPDATE_LOG_START="Update started by user %2$s (%1$s). Old version is %3$s." From a68239e66a8229d9b501eabe19a9588cf3068664 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sun, 3 Nov 2024 13:58:02 +0100 Subject: [PATCH 09/11] Change log to hard-coded string --- administrator/components/com_admin/script.php | 3 ++- administrator/language/en-GB/com_joomlaupdate.ini | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 1096d222abeed..7bd9336aeebc6 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3192,7 +3192,8 @@ protected function fixFilesystemPermissions() } try { - Log::add(Text::_('COM_JOOMLAUPDATE_UPDATE_LOG_FIX_PERMISSIONS'), Log::INFO, 'Update'); + // Using hard-coded string because a new language string would not be available in all cases + Log::add('Fixing permissions for files and folders.', Log::INFO, 'Update'); } catch (\RuntimeException $exception) { // Informational log only } diff --git a/administrator/language/en-GB/com_joomlaupdate.ini b/administrator/language/en-GB/com_joomlaupdate.ini index 562e226b88814..66daf5ab8fdb9 100644 --- a/administrator/language/en-GB/com_joomlaupdate.ini +++ b/administrator/language/en-GB/com_joomlaupdate.ini @@ -80,8 +80,6 @@ COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE="Update to version %s is complete." COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES="Deleting removed files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_FILE="File %s downloaded." COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE="Finalising installation." -; Deprecated, will be removed with 6.0 -COM_JOOMLAUPDATE_UPDATE_LOG_FIX_PERMISSIONS="Fixing permissions for files and folders." COM_JOOMLAUPDATE_UPDATE_LOG_INSTALL="Starting installation of new version." COM_JOOMLAUPDATE_UPDATE_LOG_START="Update started by user %2$s (%1$s). Old version is %3$s." COM_JOOMLAUPDATE_UPDATE_LOG_UNINSTALL_EXTENSIONS="Uninstalling extensions" From 77c0a15a56341ae45d233181141f401d6380f154 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sun, 3 Nov 2024 15:56:33 +0100 Subject: [PATCH 10/11] Make it work for CLI updates, too --- administrator/components/com_admin/script.php | 61 +++++++++++-------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 7bd9336aeebc6..8b9d193fcbfbf 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3199,33 +3199,30 @@ protected function fixFilesystemPermissions() } $files = [ - '/administrator/logs/index.html', - '/images/banners/banner.jpg', - '/images/banners/osmbanner1.png', - '/images/banners/osmbanner2.png', - '/images/banners/shop-ad-books.jpg', - '/images/banners/shop-ad.jpg', - '/images/banners/white.png', - '/images/headers/blue-flower.jpg', - '/images/headers/maple.jpg', - '/images/headers/raindrops.jpg', - '/images/headers/walden-pond.jpg', - '/images/headers/windows.jpg', - '/images/joomla_black.png', - '/images/powered_by.png', - '/images/sampledata/cassiopeia/nasa1-1200.jpg', - '/images/sampledata/cassiopeia/nasa1-400.jpg', - '/images/sampledata/cassiopeia/nasa1-640.jpg', - '/images/sampledata/cassiopeia/nasa2-1200.jpg', - '/images/sampledata/cassiopeia/nasa2-400.jpg', - '/images/sampledata/cassiopeia/nasa2-640.jpg', - '/images/sampledata/cassiopeia/nasa3-1200.jpg', - '/images/sampledata/cassiopeia/nasa3-400.jpg', - '/images/sampledata/cassiopeia/nasa3-640.jpg', - '/images/sampledata/cassiopeia/nasa4-1200.jpg', - '/images/sampledata/cassiopeia/nasa4-400.jpg', - '/images/sampledata/cassiopeia/nasa5-400.jpg', + '/htaccess.txt', + '/index.php', + '/libraries/.htaccess', + '/libraries/vendor/jfcherng/php-diff/.phpstorm.meta.php', + '/libraries/vendor/joomla/http/.drone.jsonnet', + '/libraries/vendor/joomla/http/.drone.yml', + '/libraries/vendor/joomla/oauth1/.drone.jsonnet', + '/libraries/vendor/joomla/oauth1/.drone.yml', + '/libraries/vendor/joomla/oauth2/.drone.jsonnet', + '/libraries/vendor/joomla/oauth2/.drone.yml', + '/libraries/vendor/joomla/router/.drone.jsonnet', + '/libraries/vendor/joomla/router/.drone.yml', + '/libraries/vendor/joomla/string/.drone.jsonnet', + '/libraries/vendor/joomla/string/.drone.yml', + '/libraries/vendor/joomla/uri/.drone.jsonnet', + '/libraries/vendor/joomla/uri/.drone.yml', + '/libraries/vendor/joomla/utilities/.drone.jsonnet', + '/libraries/vendor/joomla/utilities/.drone.yml', + '/LICENSE.txt', + '/README.txt', '/robots.txt', + '/robots.txt.dist', + '/tmp/index.html', + '/web.config.txt', ]; $folders = [ @@ -3550,6 +3547,12 @@ protected function fixFilesystemPermissions() if (is_dir(JPATH_ROOT . $folder) && decoct(fileperms(JPATH_ROOT . $folder) & 0777) === '777') { @chmod(JPATH_ROOT . $folder, 0755); } + + foreach (Folder::files(JPATH_ROOT . $folder, '.', false, true) as $file) { + if (decoct(fileperms($file) & 0777) === '777') { + @chmod($file, 0644); + } + } } foreach ($foldersRecursive as $parentFolder) { @@ -3563,6 +3566,12 @@ protected function fixFilesystemPermissions() @chmod($folder, 0755); } } + + foreach (Folder::files(JPATH_ROOT . $parentFolder, '.', true, true) as $file) { + if (decoct(fileperms($file) & 0777) === '777') { + @chmod($file, 0644); + } + } } } } From 3e0c3a37d2cdbedc1d601f3ba6ee044f21eebf12 Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Thu, 7 Nov 2024 13:58:10 +0100 Subject: [PATCH 11/11] Adapt to upcoming 5.2.1 without this fix --- administrator/components/com_admin/script.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 8b9d193fcbfbf..68eac8b51988f 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -3166,14 +3166,11 @@ protected function fixFilenameCasing() */ protected function fixFilesystemPermissions() { - // Don't do anything when not updating from a 5.2.0 which was a new installation + // Don't do anything if not updating from a 5.2.0 or 5.2.1 if ( empty($this->fromVersion) - || version_compare($this->fromVersion, '5.2.0', 'ne') - || ( - is_file(JPATH_ROOT . '/administrator/logs/joomla_update.php') - && (time() - filectime(JPATH_ROOT . '/administrator/logs/joomla_update.php') > 3600) - ) + || version_compare($this->fromVersion, '5.2.0', 'lt') + || version_compare($this->fromVersion, '5.2.1', 'gt') ) { return; }