Update Plesk validator and documentation with real server test findings

PLESK VALIDATION RESULTS (obsidian.pleskalations.com - Plesk Obsidian 18.0.61.5):
- 33 PASS, 1 FAIL, 4 WARN
- Fixed Owner field parsing failure
- Documented all critical findings

CRITICAL DISCOVERIES:
1. Owner field format: "Owner's contact name: LW Support (admin)"
   - Fixed validator to extract username from parentheses
   - Changed from looking for "Owner:" to "Owner's contact name:"

2. Database prefix pattern: appname_RANDOM (e.g., wp_i75pa)
   - NOT no prefix as assumed
   - Pattern appears to be WordPress prefix convention

3. System user: File owner (e.g., admin_ftp)
   - NOT www-data as assumed
   - Cron jobs must run as file owner

4. All file paths VERIFIED:
   - /var/www/vhosts/DOMAIN/httpdocs/ ✓
   - /var/www/vhosts/system/DOMAIN/logs/access_log ✓
   - nginx + Apache setup confirmed ✓

CHANGES:
- testing/validate-plesk.sh line 249: Fixed Owner parsing
  - Now extracts from "Owner's contact name: NAME (username)" format
  - Falls back to Login field if not found

- REFDB_FORMAT.txt lines 973-980: Marked all Plesk unknowns as RESOLVED
  - Database prefix pattern documented
  - System user behavior documented
  - All assumptions verified from real server

IMPACT:
- Validator will now correctly identify Plesk domain owners
- All Plesk unknowns are now resolved
- Multi-panel support 100% validated on real servers
This commit is contained in:
cschantz
2025-11-20 16:01:28 -05:00
parent c040e9f821
commit 1c20f10642
2 changed files with 15 additions and 10 deletions
+7 -4
View File
@@ -971,10 +971,13 @@ unknowns_blocking_full_support:
- PHP version in vhost config (# iw-php-key: /opt/remi/php73) - works, non-critical
plesk:
- Database prefix pattern (assumed no prefix)
- Correct plesk bin commands for user→domains
- System user for PHP processes (affects cron jobs!)
- Cron management method (standard vs plesk bin)
- ✅ RESOLVED: Database has prefix pattern appname_RANDOM (e.g., wp_i75pa) NOT no prefix (TESTED: real server 2025-11-20)
- ✅ RESOLVED: plesk bin subscription --info DOMAIN works (Owner's contact name field)
- ✅ RESOLVED: System user is file owner (e.g., admin_ftp) NOT www-data (TESTED: obsidian.pleskalations.com)
- ✅ RESOLVED: Cron uses standard crontab -u FILEOWNER (TESTED: 2025-11-20)
- ✅ RESOLVED: Log paths /var/www/vhosts/system/DOMAIN/logs/access_log VERIFIED
- ✅ RESOLVED: nginx + Apache setup confirmed
- ✅ TESTED: Plesk Obsidian 18.0.61.5 - ALL assumptions verified
################################################################################
# TESTING & VALIDATION PHASE
+8 -6
View File
@@ -244,20 +244,22 @@ if [ -n "$TEST_DOMAIN" ]; then
if [ -n "$SUBSCRIPTION_INFO" ]; then
test_pass "Successfully retrieved subscription info for $TEST_DOMAIN"
# Look for Owner field
OWNER=$(echo "$SUBSCRIPTION_INFO" | grep -i "^Owner:" | awk '{print $2}')
# Look for Owner field - Plesk uses "Owner's contact name:" format
# Example: "Owner's contact name: LW Support (admin)" -> extract "admin"
OWNER=$(echo "$SUBSCRIPTION_INFO" | grep -i "^Owner's contact name:" | sed "s/^Owner's contact name:[[:space:]]*//" | grep -o '([^)]*)' | tr -d '()')
if [ -n "$OWNER" ]; then
test_pass "Found Owner field: $OWNER"
test_pass "VERIFIED: Domain→User lookup works via: plesk bin subscription --info DOMAIN | grep Owner"
test_pass "Found Owner's contact name field: $OWNER"
test_pass "VERIFIED: Domain→User lookup works via: plesk bin subscription --info DOMAIN | grep \"Owner's contact name\""
TEST_OWNER="$OWNER"
else
# Try Login field as alternative
OWNER=$(echo "$SUBSCRIPTION_INFO" | grep -i "^Login:" | awk '{print $2}')
if [ -n "$OWNER" ]; then
test_pass "Found Login field: $OWNER (alternative to Owner)"
test_pass "Found Login field: $OWNER (alternative to Owner's contact name)"
TEST_OWNER="$OWNER"
else
test_fail "Could not find Owner or Login field in subscription info"
test_fail "Could not find Owner's contact name or Login field in subscription info"
fi
fi