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
touch "$SCAN_DIR/.scan_running"
# Detect available scanners
AVAILABLE_SCANNERS=()
# Detect available scanners (consolidate into lowercase array)
available_scanners=()
if command -v imunify-antivirus &>/dev/null; then
AVAILABLE_SCANNERS+=("imunify")
available_scanners+=("imunify")
log_message "Detected: ImunifyAV"
fi
if command -v clamscan &>/dev/null; then
AVAILABLE_SCANNERS+=("clamav")
available_scanners+=("clamav")
log_message "Detected: ClamAV"
fi
if command -v maldet &>/dev/null; then
AVAILABLE_SCANNERS+=("maldet")
available_scanners+=("maldet")
log_message "Detected: Maldet"
fi
@@ -1413,7 +1413,7 @@ fi
RKHUNTER_TEMP_INSTALLED=false
if command -v rkhunter &>/dev/null; then
AVAILABLE_SCANNERS+=("rkhunter")
available_scanners+=("rkhunter")
log_message "Detected: Rootkit Hunter"
else
# Auto-install rkhunter temporarily for this scan
@@ -1442,7 +1442,7 @@ else
log_message "WARNING: RKHunter property baseline creation failed"
fi
AVAILABLE_SCANNERS+=("rkhunter")
available_scanners+=("rkhunter")
RKHUNTER_TEMP_INSTALLED=true
log_message "RKHunter installed temporarily"
echo " ✓ RKHunter installed (will be removed after scan)"
@@ -1465,7 +1465,7 @@ else
log_message "WARNING: RKHunter property baseline creation failed"
fi
AVAILABLE_SCANNERS+=("rkhunter")
available_scanners+=("rkhunter")
RKHUNTER_TEMP_INSTALLED=true
log_message "RKHunter installed temporarily"
echo " ✓ RKHunter installed (will be removed after scan)"
@@ -1495,7 +1495,7 @@ if [ "${MALDET_ONLY:-0}" = "1" ]; then
fi
# 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"
echo ""
echo -e "${RED}No malware scanners detected!${NC}"
@@ -1541,7 +1541,7 @@ if [ ${#AVAILABLE_SCANNERS[@]} -eq 0 ]; then
exit 0
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=()
@@ -1603,7 +1603,7 @@ fi
echo "=========================================="
echo "Session: $(basename "$SCAN_DIR")"
echo "Started: $(date)"
echo "Scanners: ${AVAILABLE_SCANNERS[*]}"
echo "Scanners: ${available_scanners[*]}"
echo "Paths: ${#SCAN_PATHS[@]}"
echo ""
printf '%s\n' "${SCAN_PATHS[@]}"
@@ -1614,10 +1614,10 @@ fi
# Track completion
SCANNERS_COMPLETED=0
TOTAL_SCANNERS=${#AVAILABLE_SCANNERS[@]}
TOTAL_SCANNERS=${#available_scanners[@]}
# Run each scanner
for scanner in "${AVAILABLE_SCANNERS[@]}"; do
for scanner in "${available_scanners[@]}"; do
SCANNER_NUM=$((SCANNERS_COMPLETED + 1))
echo ""
@@ -2072,24 +2072,24 @@ done
echo "────────────────────────────────────────"
# 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")
printf "%-20s %s\n" "ImunifyAV:" "$IMUNIFY_COUNT threats detected"
fi
# 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")
printf "%-20s %s\n" "ClamAV:" "$CLAM_COUNT infected files"
fi
# 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)"
fi
# 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")
printf "%-20s %s\n" "Rootkit Hunter:" "$RKH_COUNT warnings"
fi
@@ -2132,7 +2132,7 @@ log_message "Validating scan results..."
validation_issues=0
# Check that each scanner produced output
for scanner in "${AVAILABLE_SCANNERS[@]}"; do
for scanner in "${available_scanners[@]}"; do
case "$scanner" in
imunify)
if [ ! -s "$LOG_DIR/imunify.log" ]; then