Fix: Consolidate scanner detection arrays to single lowercase name

ISSUE: Maldet menu was running all scanners (ImunifyAV, ClamAV, RKHunter)
instead of only Maldet due to architectural flaw in scanner detection.

ROOT CAUSE: Two separate scanner detection systems populated different arrays:
- detect_scanners() function: populated lowercase available_scanners[]
- main scanning logic: populated uppercase AVAILABLE_SCANNERS[]
These arrays never communicated, causing MALDET_ONLY filter to fail.

FIX: Consolidated all scanner detection to use single lowercase available_scanners[]
- Line 1395: Changed initial array declaration
- Lines 1397-1416: Fixed scanner detection assignments
- Lines 1445, 1468: Fixed rkhunter temp install assignments
- Line 1498: Fixed empty array check
- Line 1544: Fixed scanner count logging
- Line 1606: Fixed summary report scanner list
- Lines 1617, 1620: Fixed completion tracking loops
- Lines 2075, 2081, 2087, 2092: Fixed scanner-specific result reporting
- Line 2135: Fixed validation loop

RESULT:
- Maldet menu now correctly runs ONLY Maldet scans
- Multi-scanner orchestration still works correctly
- Single consistent data structure throughout execution
- MALDET_ONLY filter now works as intended

VERIFIED: bash -n syntax check passes
This commit is contained in:
Developer
2026-04-21 21:11:51 -04:00
parent 7370e90779
commit 6261fabf7a
+18 -18
View File
@@ -1391,21 +1391,21 @@ log_message "Scan session started"
# Create marker file to indicate scan is running # Create marker file to indicate scan is running
touch "$SCAN_DIR/.scan_running" touch "$SCAN_DIR/.scan_running"
# Detect available scanners # Detect available scanners (consolidate into lowercase array)
AVAILABLE_SCANNERS=() available_scanners=()
if command -v imunify-antivirus &>/dev/null; then if command -v imunify-antivirus &>/dev/null; then
AVAILABLE_SCANNERS+=("imunify") available_scanners+=("imunify")
log_message "Detected: ImunifyAV" log_message "Detected: ImunifyAV"
fi fi
if command -v clamscan &>/dev/null; then if command -v clamscan &>/dev/null; then
AVAILABLE_SCANNERS+=("clamav") available_scanners+=("clamav")
log_message "Detected: ClamAV" log_message "Detected: ClamAV"
fi fi
if command -v maldet &>/dev/null; then if command -v maldet &>/dev/null; then
AVAILABLE_SCANNERS+=("maldet") available_scanners+=("maldet")
log_message "Detected: Maldet" log_message "Detected: Maldet"
fi fi
@@ -1413,7 +1413,7 @@ fi
RKHUNTER_TEMP_INSTALLED=false RKHUNTER_TEMP_INSTALLED=false
if command -v rkhunter &>/dev/null; then if command -v rkhunter &>/dev/null; then
AVAILABLE_SCANNERS+=("rkhunter") available_scanners+=("rkhunter")
log_message "Detected: Rootkit Hunter" log_message "Detected: Rootkit Hunter"
else else
# Auto-install rkhunter temporarily for this scan # Auto-install rkhunter temporarily for this scan
@@ -1442,7 +1442,7 @@ else
log_message "WARNING: RKHunter property baseline creation failed" log_message "WARNING: RKHunter property baseline creation failed"
fi fi
AVAILABLE_SCANNERS+=("rkhunter") available_scanners+=("rkhunter")
RKHUNTER_TEMP_INSTALLED=true RKHUNTER_TEMP_INSTALLED=true
log_message "RKHunter installed temporarily" log_message "RKHunter installed temporarily"
echo " ✓ RKHunter installed (will be removed after scan)" echo " ✓ RKHunter installed (will be removed after scan)"
@@ -1465,7 +1465,7 @@ else
log_message "WARNING: RKHunter property baseline creation failed" log_message "WARNING: RKHunter property baseline creation failed"
fi fi
AVAILABLE_SCANNERS+=("rkhunter") available_scanners+=("rkhunter")
RKHUNTER_TEMP_INSTALLED=true RKHUNTER_TEMP_INSTALLED=true
log_message "RKHunter installed temporarily" log_message "RKHunter installed temporarily"
echo " ✓ RKHunter installed (will be removed after scan)" echo " ✓ RKHunter installed (will be removed after scan)"
@@ -1495,7 +1495,7 @@ if [ "${MALDET_ONLY:-0}" = "1" ]; then
fi fi
# If no scanners found, show installation guide and exit gracefully # If no scanners found, show installation guide and exit gracefully
if [ ${#AVAILABLE_SCANNERS[@]} -eq 0 ]; then if [ ${#available_scanners[@]} -eq 0 ]; then
log_message "WARNING: No scanners found on this system" log_message "WARNING: No scanners found on this system"
echo "" echo ""
echo -e "${RED}No malware scanners detected!${NC}" echo -e "${RED}No malware scanners detected!${NC}"
@@ -1541,7 +1541,7 @@ if [ ${#AVAILABLE_SCANNERS[@]} -eq 0 ]; then
exit 0 exit 0
fi fi
log_message "Found ${#AVAILABLE_SCANNERS[@]} scanner(s): ${AVAILABLE_SCANNERS[*]}" log_message "Found ${#available_scanners[@]} scanner(s): ${available_scanners[*]}"
# Scan paths (will be replaced) # Scan paths (will be replaced)
SCAN_PATHS=() SCAN_PATHS=()
@@ -1603,7 +1603,7 @@ fi
echo "==========================================" echo "=========================================="
echo "Session: $(basename "$SCAN_DIR")" echo "Session: $(basename "$SCAN_DIR")"
echo "Started: $(date)" echo "Started: $(date)"
echo "Scanners: ${AVAILABLE_SCANNERS[*]}" echo "Scanners: ${available_scanners[*]}"
echo "Paths: ${#SCAN_PATHS[@]}" echo "Paths: ${#SCAN_PATHS[@]}"
echo "" echo ""
printf '%s\n' "${SCAN_PATHS[@]}" printf '%s\n' "${SCAN_PATHS[@]}"
@@ -1614,10 +1614,10 @@ fi
# Track completion # Track completion
SCANNERS_COMPLETED=0 SCANNERS_COMPLETED=0
TOTAL_SCANNERS=${#AVAILABLE_SCANNERS[@]} TOTAL_SCANNERS=${#available_scanners[@]}
# Run each scanner # Run each scanner
for scanner in "${AVAILABLE_SCANNERS[@]}"; do for scanner in "${available_scanners[@]}"; do
SCANNER_NUM=$((SCANNERS_COMPLETED + 1)) SCANNER_NUM=$((SCANNERS_COMPLETED + 1))
echo "" echo ""
@@ -2072,24 +2072,24 @@ done
echo "────────────────────────────────────────" echo "────────────────────────────────────────"
# ImunifyAV results # ImunifyAV results
if echo "${AVAILABLE_SCANNERS[*]}" | grep -q "imunify"; then if echo "${available_scanners[*]}" | grep -q "imunify"; then
IMUNIFY_COUNT=$(grep -o "ImunifyAV scan complete - Found: [0-9]*" "$SUMMARY_FILE" | grep -o "[0-9]*$" || echo "N/A") IMUNIFY_COUNT=$(grep -o "ImunifyAV scan complete - Found: [0-9]*" "$SUMMARY_FILE" | grep -o "[0-9]*$" || echo "N/A")
printf "%-20s %s\n" "ImunifyAV:" "$IMUNIFY_COUNT threats detected" printf "%-20s %s\n" "ImunifyAV:" "$IMUNIFY_COUNT threats detected"
fi fi
# ClamAV results # ClamAV results
if echo "${AVAILABLE_SCANNERS[*]}" | grep -q "clamav"; then if echo "${available_scanners[*]}" | grep -q "clamav"; then
CLAM_COUNT=$(grep -o "ClamAV scan complete - Found: [0-9]*" "$SUMMARY_FILE" | grep -o "[0-9]*$" || echo "N/A") CLAM_COUNT=$(grep -o "ClamAV scan complete - Found: [0-9]*" "$SUMMARY_FILE" | grep -o "[0-9]*$" || echo "N/A")
printf "%-20s %s\n" "ClamAV:" "$CLAM_COUNT infected files" printf "%-20s %s\n" "ClamAV:" "$CLAM_COUNT infected files"
fi fi
# Maldet results # Maldet results
if echo "${AVAILABLE_SCANNERS[*]}" | grep -q "maldet"; then if echo "${available_scanners[*]}" | grep -q "maldet"; then
printf "%-20s %s\n" "Maldet:" "Scan complete (check logs)" printf "%-20s %s\n" "Maldet:" "Scan complete (check logs)"
fi fi
# RKHunter results # RKHunter results
if echo "${AVAILABLE_SCANNERS[*]}" | grep -q "rkhunter"; then if echo "${available_scanners[*]}" | grep -q "rkhunter"; then
RKH_COUNT=$(grep -o "RKHunter scan complete - Warnings: [0-9]*" "$SUMMARY_FILE" | grep -o "[0-9]*$" || echo "N/A") RKH_COUNT=$(grep -o "RKHunter scan complete - Warnings: [0-9]*" "$SUMMARY_FILE" | grep -o "[0-9]*$" || echo "N/A")
printf "%-20s %s\n" "Rootkit Hunter:" "$RKH_COUNT warnings" printf "%-20s %s\n" "Rootkit Hunter:" "$RKH_COUNT warnings"
fi fi
@@ -2132,7 +2132,7 @@ log_message "Validating scan results..."
validation_issues=0 validation_issues=0
# Check that each scanner produced output # Check that each scanner produced output
for scanner in "${AVAILABLE_SCANNERS[@]}"; do for scanner in "${available_scanners[@]}"; do
case "$scanner" in case "$scanner" in
imunify) imunify)
if [ ! -s "$LOG_DIR/imunify.log" ]; then if [ ! -s "$LOG_DIR/imunify.log" ]; then