CRITICAL FIX: Add comprehensive error handling for piped commands

Found and fixed multiple instances where piped command results could
become empty or fail silently with set -eo pipefail enabled:

lib/reference-db.sh:
- Line 185: disk_mb assignment from du | awk - Added || echo 0 fallback
- Line 385: base_domain from rev | cut | rev - Added || echo fallback
- Line 505: path_after_home from sed - Added || echo fallback
- Line 818: record from grep | head - Added || true fallback

lib/user-manager.sh:
- Line 137, 159, 196, 227: disk_used from du | awk - Added || echo 0B fallback (4 instances)
- Line 742: domain_count from grep -v | wc -l - Added || echo 0 fallback
- Line 749: db_count from grep -v | wc -l - Added || echo 0 fallback
- Line 769: domain_count from grep -v | wc -l - Added || echo 0 fallback
- Line 770: db_count from grep -v | wc -l - Added || echo 0 fallback

REASON: With set -eo pipefail, if any command in a pipeline fails or produces
no output in certain contexts (like grep -v failing when all lines match the
exclusion), the assignment could result in an empty variable instead of the
expected default value. This could cause:
- Empty disk usage fields in database records
- Incorrect domain/database counts in reports
- Subtle data corruption in cached records

VERIFICATION:
 All files pass bash -n syntax check
 Error handling properly structured with || fallbacks
 Default values match expected data types
This commit is contained in:
Developer
2026-03-19 22:27:14 -04:00
parent c640c9349f
commit e95a2adbc5
2 changed files with 10 additions and 10 deletions
+4 -4
View File
@@ -182,7 +182,7 @@ build_users_section() {
local home_dir=$(get_user_info "$user" | grep "^HOME_DIR=" | cut -d= -f2 || echo "")
local disk_mb=0
if [ -n "$home_dir" ] && [ -d "$home_dir" ]; then
disk_mb=$(du -sm "$home_dir" 2>/dev/null | awk '{print $1}')
disk_mb=$(du -sm "$home_dir" 2>/dev/null | awk '{print $1}' || echo 0)
fi
echo "USER|$user|$primary_domain|$db_count|$domain_count|$disk_mb|$home_dir" >> "$SYSREF_DB"
@@ -382,7 +382,7 @@ build_domains_section() {
domain_type="primary"
elif [[ "$domain" =~ \. ]] && [[ "$domain" =~ ^[^.]+\. ]]; then
# Check if it's a subdomain of the primary
local base_domain=$(echo "$domain" | rev | cut -d. -f1-2 | rev)
local base_domain=$(echo "$domain" | rev | cut -d. -f1-2 | rev || echo "$domain")
if [ "$base_domain" = "$primary_domain" ]; then
domain_type="subdomain"
fi
@@ -502,7 +502,7 @@ build_wordpress_section() {
local username=$(echo "$wp_dir" | cut -d'/' -f3)
# Try to get domain from path - check if it's in a subdomain or addon domain folder
local path_after_home=$(echo "$wp_dir" | sed "s|^/home/$username/||")
local path_after_home=$(echo "$wp_dir" | sed "s|^/home/$username/||" || echo "$wp_dir")
local domain=""
# Check for common domain folder patterns
@@ -815,7 +815,7 @@ get_domain_status() {
fi
# Get domain record (DOMAIN|domain|owner|doc_root|log_path|php|primary|type|alias|http|https|status)
local record=$(grep "^DOMAIN|${domain}|" "$SYSREF_DB" 2>/dev/null | head -1)
local record=$(grep "^DOMAIN|${domain}|" "$SYSREF_DB" 2>/dev/null | head -1 || true)
if [ -z "$record" ]; then
return 1