abbeaf67ec
Live testing on a real DirectAdmin/CustomBuild server showed the Apache alias fix alone wasn't enough: the default vhost serving /var/www/html uses `SuexecUserGroup webapps webapps`, so PHP for the private phpMyAdmin copy actually executes as user/group "webapps" - not as Apache's own httpd.conf "Group" (typically "apache"), which is what detect_apache_group() was reading. SSO ticket files ended up owned root:apache with mode 0640, unreadable by the webapps-executing da_login.php, producing "The phpMyAdmin login ticket is not available or has already been used." even though the ticket really was written. detect_apache_group() now checks the default vhost's SuexecUserGroup directive first (the actual PHP-execution identity under SuExec), and only falls back to the plain Apache Group directive when no SuexecUserGroup is configured. Bump version to 1.2.13 and rebuild the release archive.
105 lines
6.0 KiB
Bash
105 lines
6.0 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
ARCHIVE="${1:-$(cd "$PLUGIN_DIR/.." && pwd)/archives/1.2.13/alt-mysql.tar.gz}"
|
|
|
|
fail() {
|
|
echo "FAIL: $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
[ -s "$ARCHIVE" ] || fail "archive does not exist or is empty: $ARCHIVE"
|
|
|
|
LIST="$(tar -tzf "$ARCHIVE")"
|
|
printf '%s\n' "$LIST" | grep -Eq '^(\./)?plugin\.conf$' \
|
|
|| fail "archive does not contain plugin.conf at tar root"
|
|
if printf '%s\n' "$LIST" | grep -Eq '^(\./)?alt-mysql/'; then
|
|
fail "archive contains parent alt-mysql directory"
|
|
fi
|
|
if printf '%s\n' "$LIST" | grep -Eiq 'postgres|postgresql|pgsql|phppgadmin'; then
|
|
fail "archive contains PostgreSQL/phpPgAdmin leftovers"
|
|
fi
|
|
if printf '%s\n' "$LIST" | grep -Eq '^(\./)?tests/'; then
|
|
fail "archive contains local test suite"
|
|
fi
|
|
if printf '%s\n' "$LIST" | grep -Eq '(^|/)\._[^/]+$|(^|/)\.DS_Store$|__MACOSX'; then
|
|
fail "archive contains macOS AppleDouble or Finder metadata"
|
|
fi
|
|
printf '%s\n' "$LIST" | grep -Eq '^(\./)?scripts/setup/phpmyadmin_private_install\.sh$' \
|
|
|| fail "archive does not contain private phpMyAdmin installer"
|
|
printf '%s\n' "$LIST" | grep -Eq '^(\./)?scripts/install_db\.sh$' \
|
|
|| fail "archive does not contain install_db.sh at scripts/"
|
|
if printf '%s\n' "$LIST" | grep -Eq '(^|/)install-alt-mariadb\.sh$'; then
|
|
fail "archive contains old install-alt-mariadb.sh"
|
|
fi
|
|
|
|
CONF="$(tar -xOzf "$ARCHIVE" ./plugin.conf 2>/dev/null || tar -xOzf "$ARCHIVE" plugin.conf)"
|
|
printf '%s\n' "$CONF" | grep -Fxq "name=alt-mysql" || fail "archive plugin name is not alt-mysql"
|
|
printf '%s\n' "$CONF" | grep -Fxq "id=alt-mysql" || fail "archive plugin id is not alt-mysql"
|
|
printf '%s\n' "$CONF" | grep -Fxq "version=1.2.13" || fail "archive plugin version is not 1.2.13"
|
|
|
|
SETTINGS="$(tar -xOzf "$ARCHIVE" ./plugin-settings.conf 2>/dev/null || tar -xOzf "$ARCHIVE" plugin-settings.conf)"
|
|
printf '%s\n' "$SETTINGS" | grep -Fxq "PHPMYADMIN_INSTALL_DIR=/var/www/html/alt-mysql-phpmyadmin" \
|
|
|| fail "archive settings do not point to private phpMyAdmin install dir"
|
|
printf '%s\n' "$SETTINGS" | grep -Fxq "PHPMYADMIN_URL_PATH=/alt-mysql-phpmyadmin" \
|
|
|| fail "archive settings do not point to private phpMyAdmin URL"
|
|
printf '%s\n' "$SETTINGS" | grep -Fxq "always_enabled=1" \
|
|
|| fail "archive settings do not enable always_enabled by default"
|
|
|
|
INSTALL_SCRIPT="$(tar -xOzf "$ARCHIVE" ./scripts/install.sh 2>/dev/null || tar -xOzf "$ARCHIVE" scripts/install.sh)"
|
|
printf '%s\n' "$INSTALL_SCRIPT" | grep -Fq 'always_enabled()' \
|
|
|| fail "archive install script does not read always_enabled"
|
|
printf '%s\n' "$INSTALL_SCRIPT" | grep -Fq 'if always_enabled; then' \
|
|
|| fail "archive install script does not hide custom package fields when always_enabled is on"
|
|
|
|
DB_INSTALLER="$(tar -xOzf "$ARCHIVE" ./scripts/install_db.sh 2>/dev/null || tar -xOzf "$ARCHIVE" scripts/install_db.sh)"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq 'apply_cli_args "$@"' \
|
|
|| fail "archive install_db.sh does not apply positional arguments"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq 'MARIADB_VERSION="$1"' \
|
|
|| fail "archive install_db.sh does not accept MariaDB version as first argument"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq 'PORT="$2"' \
|
|
|| fail "archive install_db.sh does not accept TCP port as second argument"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq 'rerun_plugin_install_if_available' \
|
|
|| fail "archive install_db.sh does not refresh plugin install.sh after DB setup"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq 'SKIP_PLUGIN_INSTALL_REFRESH' \
|
|
|| fail "archive install_db.sh does not expose a test/maintenance escape hatch for plugin refresh"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq '[[ $# -eq 0 ]]' \
|
|
|| fail "archive install_db.sh does not show usage when called without arguments"
|
|
printf '%s\n' "$DB_INSTALLER" | grep -Fq '<MARIADB_VERSION> <PORT>' \
|
|
|| fail "archive install_db.sh usage does not require version and port"
|
|
|
|
INSTALLER="$(tar -xOzf "$ARCHIVE" ./scripts/setup/phpmyadmin_install.sh 2>/dev/null || tar -xOzf "$ARCHIVE" scripts/setup/phpmyadmin_install.sh)"
|
|
printf '%s\n' "$INSTALLER" | grep -Fq "\$cfg['Servers'][\$i]['SignonURL'] = da_mysql_phpmyadmin_signon_url(\$runtimeConfig);" \
|
|
|| fail "archive phpMyAdmin installer does not configure SignonURL"
|
|
printf '%s\n' "$INSTALLER" | grep -Fq 'SIGNON_URL_PAGE="${PHPMYADMIN_PRIVATE_DIR}/da_login.php"' \
|
|
|| fail "archive phpMyAdmin installer does not create SignonURL page"
|
|
printf '%s\n' "$INSTALLER" | grep -Fq 'DA_MYSQL_PHPMYADMIN_AUTH' \
|
|
|| fail "archive phpMyAdmin installer does not create ticket-based da_login.php"
|
|
printf '%s\n' "$INSTALLER" | grep -Fq 'da_mysql_signon_read_auth' \
|
|
|| fail "archive phpMyAdmin installer does not isolate phpMyAdmin and SSO sessions"
|
|
|
|
OPEN_HANDLER="$(tar -xOzf "$ARCHIVE" ./exec/handlers/open_phpmyadmin.php 2>/dev/null || tar -xOzf "$ARCHIVE" exec/handlers/open_phpmyadmin.php)"
|
|
printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'phpmyadmin_health_check.sh' \
|
|
|| fail "archive open phpMyAdmin handler does not run health check"
|
|
printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'phpmyadmin_repair.sh' \
|
|
|| fail "archive open phpMyAdmin handler does not run repair before redirect"
|
|
printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'HTTP/1.1 302 Found' \
|
|
|| fail "archive open phpMyAdmin raw handler does not emit an HTTP redirect"
|
|
printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'Location: ' \
|
|
|| fail "archive open phpMyAdmin raw handler does not emit a Location header"
|
|
if printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'meta http-equiv="refresh"'; then
|
|
fail "archive open phpMyAdmin raw handler still uses meta refresh"
|
|
fi
|
|
if printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'Set-Cookie: '; then
|
|
fail "archive open phpMyAdmin handler still tries to pass SSO through DirectAdmin PHP session cookie"
|
|
fi
|
|
|
|
SSO_CLASS="$(tar -xOzf "$ARCHIVE" ./exec/lib/PhpMyAdminSso.php 2>/dev/null || tar -xOzf "$ARCHIVE" exec/lib/PhpMyAdminSso.php)"
|
|
printf '%s\n' "$SSO_CLASS" | grep -Fq 'writeLoginTicket' \
|
|
|| fail "archive phpMyAdmin SSO class does not write login tickets"
|
|
printf '%s\n' "$SSO_CLASS" | grep -Fq '/da_login.php?' \
|
|
|| fail "archive phpMyAdmin SSO class does not target da_login.php ticket flow"
|
|
|
|
echo "package_archive_test: OK"
|