#!/bin/sh

#################################################################################
#
#   Lynis
# ------------------
#
# Copyright (c) Michael Boelen, CISOfy, and many contributors.
#
# Website  : https://cisofy.com/
# Blog     : https://linux-audit.com/
# GitHub   : https://github.com/CISOfy/lynis
#
# Lynis comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
# welcome to redistribute it under the terms of the GNU General Public License.
# See LICENSE file for usage of this software.
#
#################################################################################
#
# SNMP related tests
#
#################################################################################
#
    SNMP_DAEMON_CONFIG_LOCS="${ROOTDIR}etc/snmp"
    SNMP_DAEMON_CONFIG=""
    SNMP_DAEMON_RUNNING=0
#
#################################################################################
#
    InsertSection "${SECTION_SNMP_SUPPORT}"

    # Test        : SNMP-3302
    # Description : Check for a running SNMP daemon
    Register --test-no SNMP-3302 --weight L --network NO --category security --description "Check for running SNMP daemon"
    if [ ${SKIPTEST} -eq 0 ]; then
        LogText "Test: Searching for a SNMP daemon"
        if IsRunning "snmpd"; then
            SNMP_DAEMON_RUNNING=1
            LogText "Result: SNMP daemon is running"
            Display --indent 2 --text "- Checking running SNMP daemon" --result "${STATUS_FOUND}" --color GREEN
        else
            LogText "Result: No running SNMP daemon found"
            Display --indent 2 --text "- Checking running SNMP daemon" --result "${STATUS_NOT_FOUND}" --color WHITE
        fi
    fi
#
#################################################################################
#
    # Test        : SNMP-3304
    # Description : Determine SNMP daemon configuration file location
    if [ ${SNMP_DAEMON_RUNNING} -eq 1 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
    Register --test-no SNMP-3304 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check SNMP daemon file location"
    if [ ${SKIPTEST} -eq 0 ]; then
        LogText "Test: searching for snmpd.conf file"
        for I in ${SNMP_DAEMON_CONFIG_LOCS}; do
            if [ -f "${I}/snmpd.conf" ]; then
                LogText "Result: ${I}/snmpd.conf exists"
                SNMP_DAEMON_CONFIG="${I}/snmpd.conf"
            fi
        done
        if [ -z "${SNMP_DAEMON_CONFIG}" ]; then
            LogText "Result: No snmpd configuration found"
            Display --indent 4 --text "- Checking SNMP configuration" --result "${STATUS_NOT_FOUND}" --color WHITE
        else
            LogText "Result: using last found configuration file: ${SNMP_DAEMON_CONFIG}"
            Display --indent 4 --text "- Checking SNMP configuration" --result "${STATUS_FOUND}" --color GREEN
        fi
    fi
#
#################################################################################
#
    # Test        : SNMP-3306
    # Description : Determine SNMP communities
    if [ -n "${SNMP_DAEMON_CONFIG}" ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
    Register --test-no SNMP-3306 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check SNMP communities"
    if [ ${SKIPTEST} -eq 0 ]; then
        WARN=0
        LogText "Test: reading active snmp communities"
        FIND=$(${AWKBINARY} '/^com2sec/ { print $4 }' ${SNMP_DAEMON_CONFIG})
        for I in ${FIND}; do
            LogText "Output: ${I}"
            if [ "${I}" = "public" -o "${I}" = "private" ]; then
                LogText "Result: found easy guessable snmp community string (${I})"
                WARN=1
                AddHP 1 3
            fi
        done

        # Check status of test
        if [ ${WARN} -eq 0 ]; then
            Display --indent 2 --text "- Checking SNMP community strings" --result "${STATUS_OK}" --color GREEN
            AddHP 2 2
        else
            Display --indent 2 --text "- Checking SNMP community strings" --result "${STATUS_WARNING}" --color RED
            ReportWarning "${TEST_NO}" "Found easy guessable SNMP community string"
        fi
    fi
#
#################################################################################
#

WaitForKeyPress

# EOF
