diff --git a/ops/restore-tests/nextcloud-restore-test.sh b/ops/restore-tests/nextcloud-restore-test.sh index ae12b18..85f435a 100644 --- a/ops/restore-tests/nextcloud-restore-test.sh +++ b/ops/restore-tests/nextcloud-restore-test.sh @@ -155,16 +155,30 @@ if [ -f "$CONFIG_PHP" ]; then # Wir ersetzen nur den Host-Wert innerhalb des redis-Blocks. sed -i "s|'host' => 'nextcloud-redis'|'host' => 'restoretest-nextcloud-redis'|g" "$CONFIG_PHP" - # trusted_domains: 127.0.0.1 hinzufuegen, damit der Smoke-Endpunkt akzeptiert wird. - # Nextcloud prueft trusted_domains und blockt sonst mit "Access through untrusted domain" (503). - # Wir fuegen per PHP-Code-Injection am Ende der config eine zweite trusted_domain hinzu. - # Das ist robuster als den Array-Block per sed zu finden. + # Zwei Patches in der config.php, beides per PHP-Code-Injection am Ende: + # + # 1. trusted_domains: 127.0.0.1 hinzufuegen, damit der Smoke-Endpunkt + # akzeptiert wird. Nextcloud prueft trusted_domains und blockt sonst + # mit "Access through untrusted domain" (503). + # + # 2. check_data_directory_permissions: false. Hintergrund: Nextcloud + # (OC_Util::checkDataDirectoryPermissions) prueft beim HTTP-Request, ob + # die data-Dir-Permissions in der letzten Stelle 0 sind. Falls nicht, + # versucht es als www-data ein chmod(0770). Auf Unraid (shfs/FUSE) + # lehnt das Filesystem chmod von Non-Root ab, also kann der Container + # das nie korrigieren -> Nextcloud meldet "data directory readable by + # other people" -> HTTP 503. Im isolierten Smoke-Kontext (Wegwerf- + # Daten, kein Public, kein Traefik) ist das Aushebeln dieses Checks + # sauber dokumentiert vorgesehen. Produktiv bleibt der Check an. php -r " \$f = '$CONFIG_PHP'; \$c = file_get_contents(\$f); - if (strpos(\$c, \"'127.0.0.1'\") === false) { + if (strpos(\$c, \"'127.0.0.1'\") === false || strpos(\$c, 'check_data_directory_permissions') === false) { include \$f; - \$CONFIG['trusted_domains'][] = '127.0.0.1'; + if (!in_array('127.0.0.1', \$CONFIG['trusted_domains'])) { + \$CONFIG['trusted_domains'][] = '127.0.0.1'; + } + \$CONFIG['check_data_directory_permissions'] = false; \$out = ' '127.0.0.1',\n )|" "$CONFIG_PHP" || true fi + if ! grep -q "check_data_directory_permissions" "$CONFIG_PHP"; then + sed -i "s|^);| 'check_data_directory_permissions' => false,\n);|" "$CONFIG_PHP" || true + fi } config_patched="ok"