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 home_dir=$(get_user_info "$user" | grep "^HOME_DIR=" | cut -d= -f2 || echo "")
|
||||||
local disk_mb=0
|
local disk_mb=0
|
||||||
if [ -n "$home_dir" ] && [ -d "$home_dir" ]; then
|
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
|
fi
|
||||||
|
|
||||||
echo "USER|$user|$primary_domain|$db_count|$domain_count|$disk_mb|$home_dir" >> "$SYSREF_DB"
|
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"
|
domain_type="primary"
|
||||||
elif [[ "$domain" =~ \. ]] && [[ "$domain" =~ ^[^.]+\. ]]; then
|
elif [[ "$domain" =~ \. ]] && [[ "$domain" =~ ^[^.]+\. ]]; then
|
||||||
# Check if it's a subdomain of the primary
|
# 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
|
if [ "$base_domain" = "$primary_domain" ]; then
|
||||||
domain_type="subdomain"
|
domain_type="subdomain"
|
||||||
fi
|
fi
|
||||||
@@ -502,7 +502,7 @@ build_wordpress_section() {
|
|||||||
local username=$(echo "$wp_dir" | cut -d'/' -f3)
|
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
|
# 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=""
|
local domain=""
|
||||||
|
|
||||||
# Check for common domain folder patterns
|
# Check for common domain folder patterns
|
||||||
@@ -815,7 +815,7 @@ get_domain_status() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Get domain record (DOMAIN|domain|owner|doc_root|log_path|php|primary|type|alias|http|https|status)
|
# 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
|
if [ -z "$record" ]; then
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
+6
-6
@@ -134,7 +134,7 @@ get_cpanel_user_info() {
|
|||||||
local all_domains=$(grep "^DNS" -- "$user_file" | cut -d= -f2 | tr '\n' ' ')
|
local all_domains=$(grep "^DNS" -- "$user_file" | cut -d= -f2 | tr '\n' ' ')
|
||||||
|
|
||||||
# Get disk usage
|
# 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 "USER_EXISTS=yes"
|
||||||
echo "USERNAME=$username"
|
echo "USERNAME=$username"
|
||||||
@@ -193,7 +193,7 @@ get_interworx_user_info() {
|
|||||||
sed 's|.*/vhost_||; s|\.conf$||' | tr '\n' ' ' | sed 's/[[:space:]]*$//')
|
sed 's|.*/vhost_||; s|\.conf$||' | tr '\n' ' ' | sed 's/[[:space:]]*$//')
|
||||||
|
|
||||||
# Get disk usage
|
# 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)
|
# Try to get email from NodeWorx API (if available)
|
||||||
# Note: This requires nodeworx CLI which may need authentication
|
# Note: This requires nodeworx CLI which may need authentication
|
||||||
@@ -739,14 +739,14 @@ show_user_summary() {
|
|||||||
|
|
||||||
# Domains
|
# Domains
|
||||||
local domains=$(get_user_domains "$username")
|
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 ($domain_count):"
|
||||||
echo "$domains" | sed 's/^/ - /'
|
echo "$domains" | sed 's/^/ - /'
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Databases
|
# Databases
|
||||||
local databases=$(get_user_databases "$username")
|
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 ($db_count):"
|
||||||
echo "$databases" | sed 's/^/ - /'
|
echo "$databases" | sed 's/^/ - /'
|
||||||
echo ""
|
echo ""
|
||||||
@@ -766,8 +766,8 @@ show_all_users_summary() {
|
|||||||
|
|
||||||
for user in "${users[@]}"; do
|
for user in "${users[@]}"; do
|
||||||
local primary=$(get_user_domains "$user" | head -1)
|
local primary=$(get_user_domains "$user" | head -1)
|
||||||
local domain_count=$(get_user_domains "$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)
|
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"
|
printf " %-20s %-30s %10s %10s\n" "$user" "$primary" "$domain_count" "$db_count"
|
||||||
done
|
done
|
||||||
|
|||||||
Reference in New Issue
Block a user