From 83ad5a0b9cc6b98451ff5691d303d6e0c56ce735 Mon Sep 17 00:00:00 2001 From: cschantz Date: Wed, 24 Dec 2025 16:29:27 -0500 Subject: [PATCH] Add plesk_list_users() function for Plesk user discovery Issue: list_plesk_users() in user-manager.sh was trying to query MySQL but the query was failing, resulting in 0 users detected on Plesk. Fix: 1. Added plesk_list_users() to plesk-helpers.sh that uses: - Plesk CLI: 'plesk bin client --list' (primary) - Fallback: Scan /var/www/vhosts directories 2. Updated list_plesk_users() in user-manager.sh to: - First try plesk_list_users() if available - Then try MySQL query - Last resort: directory scan This should now detect Plesk users from either Plesk API or filesystem fallback. Testing: Will verify on Plesk server --- lib/plesk-helpers.sh | 18 ++++++++++++++++++ lib/user-manager.sh | 12 +++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/plesk-helpers.sh b/lib/plesk-helpers.sh index 05a2a44..178a04a 100644 --- a/lib/plesk-helpers.sh +++ b/lib/plesk-helpers.sh @@ -46,6 +46,24 @@ plesk_list_domains() { fi } +############################################################################# +# USER DISCOVERY +############################################################################# + +# Get list of all Plesk users (clients) +# Returns: One username per line +plesk_list_users() { + if plesk_cli_available; then + # Try to get client logins from Plesk + plesk_exec bin client --list 2>/dev/null | tail -n +3 | awk '{print $1}' | grep -v "^$" + else + # Fallback: Get unique owners from vhosts directories + find /var/www/vhosts -maxdepth 1 -type d -printf "%f\n" 2>/dev/null | \ + grep -v "^system$\|^chroot$\|^\.skel$\|^default$\|^fs$\|^fs-passwd$" | \ + grep -v "^\." || true + fi +} + # Get domain info # Usage: plesk_domain_info DOMAIN plesk_domain_info() { diff --git a/lib/user-manager.sh b/lib/user-manager.sh index b348dcc..abe0386 100755 --- a/lib/user-manager.sh +++ b/lib/user-manager.sh @@ -52,11 +52,17 @@ list_cpanel_users() { # Plesk user listing list_plesk_users() { - if command_exists mysql && [ -f /etc/psa/.psa.shadow ]; then + # Use plesk_list_users() if available (from plesk-helpers.sh) + if type plesk_list_users >/dev/null 2>&1; then + plesk_list_users + elif command_exists mysql && [ -f /etc/psa/.psa.shadow ]; then + # Fallback: Try MySQL query mysql -Ns psa -e "SELECT login FROM sys_users WHERE type='user'" 2>/dev/null else - # Fallback: list directories - find /var/www/vhosts -maxdepth 1 -type d -printf "%f\n" 2>/dev/null | grep -v "^system$\|^default$\|^chroot$" + # Last resort: list directories + find /var/www/vhosts -maxdepth 1 -type d -printf "%f\n" 2>/dev/null | \ + grep -v "^system$\|^default$\|^chroot$\|^\.skel$\|^fs$\|^fs-passwd$" | \ + grep -v "^\." fi }