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:
+4
-4
@@ -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
|
||||
|
||||
+6
-6
@@ -134,7 +134,7 @@ get_cpanel_user_info() {
|
||||
local all_domains=$(grep "^DNS" -- "$user_file" | cut -d= -f2 | tr '\n' ' ')
|
||||
|
||||
# Get disk usage
|
||||
local disk_used=$(du -sh "$home_dir" 2>/dev/null | awk '{print $1}')
|
||||
local disk_used=$(du -sh "$home_dir" 2>/dev/null | awk '{print $1}' || echo "0B")
|
||||
|
||||
echo "USER_EXISTS=yes"
|
||||
echo "USERNAME=$username"
|
||||
@@ -193,7 +193,7 @@ get_interworx_user_info() {
|
||||
sed 's|.*/vhost_||; s|\.conf$||' | tr '\n' ' ' | sed 's/[[:space:]]*$//')
|
||||
|
||||
# Get disk usage
|
||||
local disk_used=$(du -sh "$home_dir" 2>/dev/null | awk '{print $1}')
|
||||
local disk_used=$(du -sh "$home_dir" 2>/dev/null | awk '{print $1}' || echo "0B")
|
||||
|
||||
# Try to get email from NodeWorx API (if available)
|
||||
# Note: This requires nodeworx CLI which may need authentication
|
||||
@@ -739,14 +739,14 @@ show_user_summary() {
|
||||
|
||||
# Domains
|
||||
local domains=$(get_user_domains "$username")
|
||||
local domain_count=$(echo "$domains" | grep -v "^$" | wc -l)
|
||||
local domain_count=$(echo "$domains" | grep -v "^$" | wc -l || echo 0)
|
||||
echo " Domains ($domain_count):"
|
||||
echo "$domains" | sed 's/^/ - /'
|
||||
echo ""
|
||||
|
||||
# Databases
|
||||
local databases=$(get_user_databases "$username")
|
||||
local db_count=$(echo "$databases" | grep -v "^$" | wc -l)
|
||||
local db_count=$(echo "$databases" | grep -v "^$" | wc -l || echo 0)
|
||||
echo " Databases ($db_count):"
|
||||
echo "$databases" | sed 's/^/ - /'
|
||||
echo ""
|
||||
@@ -766,8 +766,8 @@ show_all_users_summary() {
|
||||
|
||||
for user in "${users[@]}"; do
|
||||
local primary=$(get_user_domains "$user" | head -1)
|
||||
local domain_count=$(get_user_domains "$user" | grep -v "^$" | wc -l)
|
||||
local db_count=$(get_user_databases "$user" | grep -v "^$" | wc -l)
|
||||
local domain_count=$(get_user_domains "$user" | grep -v "^$" | wc -l || echo 0)
|
||||
local db_count=$(get_user_databases "$user" | grep -v "^$" | wc -l || echo 0)
|
||||
|
||||
printf " %-20s %-30s %10s %10s\n" "$user" "$primary" "$domain_count" "$db_count"
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user