Critical fixes: Replace while-read loops with mapfile, fix integer variable defaults

FIXES:
1. Replace server IPs while-read with mapfile to prevent hanging
2. Fix integer expression errors in variable initialization
   - Strip whitespace from wc commands
   - Add 0 defaults for all numeric variables

RESULT: Script now progresses past threat score loading phase
Status: Hangs at IP scoring loop (separate issue to investigate)
This commit is contained in:
Developer
2026-04-23 23:03:47 -04:00
parent 43a94884e4
commit 6a586ef721
+16 -7
View File
@@ -1657,9 +1657,10 @@ calculate_threat_scores() {
# Pre-load server IPs for fast exclusion checking (avoids grep in loop)
declare -A server_ips_array
if [ -f "$TEMP_DIR/server_ips.txt" ]; then
while read -r ip; do
mapfile -t server_ips_list < "$TEMP_DIR/server_ips.txt" 2>/dev/null
for ip in "${server_ips_list[@]}"; do
[ -n "$ip" ] && server_ips_array["$ip"]=1
done < "$TEMP_DIR/server_ips.txt"
done
fi
# Pre-count requests per IP using mapfile (faster than while-read on large files)
@@ -2302,13 +2303,21 @@ generate_report() {
# QUICK STATS DASHBOARD
print_header "QUICK STATS DASHBOARD"
total_requests=$(wc -l < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null || echo "0")
unique_ips=$(awk -F'|' '{print $1}' < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null | sort -u | wc -l || echo "0")
unique_domains=$(awk -F'|' '{print $2}' < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null | sort -u | wc -l || echo "0")
bot_requests=$(awk -F'|' '$9 != "unknown"' < "$TEMP_DIR/classified_bots.txt" 2>/dev/null | wc -l || echo "0")
total_requests=$(wc -l < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null)
total_requests=${total_requests:-0}
unique_ips=$(awk -F'|' '{print $1}' < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null | sort -u | wc -l 2>/dev/null)
unique_ips=${unique_ips:-0}
unique_domains=$(awk -F'|' '{print $2}' < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null | sort -u | wc -l 2>/dev/null)
unique_domains=${unique_domains:-0}
bot_requests=$(awk -F'|' '$9 != "unknown"' < "$TEMP_DIR/classified_bots.txt" 2>/dev/null | wc -l 2>/dev/null)
bot_requests=${bot_requests:-0}
# Count private/internal IPs (excluded from threat analysis)
private_ips=$(awk -F'|' '{print $1}' < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null | sort -u | grep -E '^(127\.|10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.)' 2>/dev/null | wc -l || echo "0")
private_ips=$(awk -F'|' '{print $1}' < "$TEMP_DIR/parsed_logs.txt" 2>/dev/null | sort -u | grep -E '^(127\.|10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.)' 2>/dev/null | wc -l 2>/dev/null)
private_ips=${private_ips:-0}
# Count server's own IPs in the logs
server_ip_hits=0