#!/bin/bash
# old log structure

MULTILINEDLE=0

printf "# note from the aide package maintainer on 2025-05-25:\\n"
printf "# this is generated by /etc/aide/aide.conf.d/31_aide_amanda-server\\n"
printf "# and is untested. If you use amanda, please consider getting in\\n"
printf "# touch with the Debian aide maintainers <aide@packages.debian.org>\\n"
printf "# to help modernizing this rule.\\n"
printf "# If nobody helps, this rule will be made a no-op in Debian forky.\\n"

skip_multiline_dle() {
    if [ "$MULTILINEDLE" = "0" ]; then	
        if echo "${rest}" | grep -q '{'; then
            MULTILINEDLE=1
        fi
        return 1
    elif echo "${host} ${dev} ${rest}" | grep -q '}'; then
        MULTILINEDLE=0
    fi
    return 0
}

if ! [ -d "/etc/amanda" ]; then
    exit 0
fi
for configfile in $(find /etc/amanda -name amanda.conf ! -path '/etc/amanda/template.d*' | tr '
' ' '); do
    config="$(dirname "${configfile}")"
    cd "${config}" || exit 1
    CONF="${config##*/}"
    AMANDA_TAPEDEV="$(amgetconf "${CONF}" tapedev)"
    AMANDA_TAPEDEV="${AMANDA_TAPEDEV#file:/}"
    if [ -d "${AMANDA_TAPEDEV}" ]; then
        print " @@define AMANDA_TAPEDEV %s\\n" "${AMANDA_TAPEDEV}"
        #shellcheck disable=SC2044
        for slot in $(find /"${AMANDA_TAPEDEV}" -type d -regex '.*/slot[0-9]+' -printf "%P\\n"); do
            if [ -f "disklist" ]; then
                while read -r host dev rest; do
                    if echo "${host}" | grep -qE '^(#.*)?$'; then continue; fi
                    #shellcheck disable=SC2001
                    dev="$(echo "${dev}" | sed 's|/|_|g')"
                    if ! skip_multiline_dle; then
                        printf "!/@@{AMANDA_TAPEDEV}/%s/[0-9]{5}[-\\.]%s\\.%s\\.[0123]$ d" "${slot}" "${host}" "${dev}"
                    fi
                done < disklist
                MULTILINEDLE=0
            fi
            printf " /@@{AMANDA_TAPEDEV}/%s/00000[-\\.]%s-%03d$ f VarFile\\n" "${slot}" "${CONF}" "${slot#slot}"
            printf "!/@@{AMANDA_TAPEDEV}/%s/[0-9]{5}[-\\.]TAPEEND$ f\\n" "${slot}"
            printf " /@@{AMANDA_TAPEDEV}/%s$ d VarDir\\n" "${slot}"
        done
        printf "  /@@{AMANDA_TAPEDEV}/(data|info)$ f VarFile\\n"
        printf "  /@@{AMANDA_TAPEDEV}$ d VarDir\\n"
    fi
    AMANDA_LOGDIR="$(amgetconf "${CONF}" logdir)"
    AMANDA_LOGDIR="${AMANDA_LOGDIR#/}"
    if [ -n "$AMANDA_LOGDIR" ]; then
        printf " @@define AMANDA_LOGDIR %s\\n" "${AMANDA_LOGDIR}"
        printf " /@@{AMANDA_LOGDIR}/log\\.@@{YEAR4D}[0-9]{4}\\.0$ f        MidlSerLog+ANF+ARF\\n"
        printf " /@@{AMANDA_LOGDIR}/oldlog/log\\.@@{YEAR4D}[0-9]{4}\\.0$ f MidlSerLog+ANF+ARF\\n"
        printf " /@@{AMANDA_LOGDIR}/amdump\\.1$ f     MidlSerLog\\n"
        printf " /@@{AMANDA_LOGDIR}/amdump\\.[2-8]$ f MidlSerLog\\n"
        printf " /@@{AMANDA_LOGDIR}/amdump\\.9$ f     LastSerLog\\n"
        printf " /@@{AMANDA_LOGDIR}(/oldlog)?$ d VarDir\\n"
    fi
    AMANDA_INDEXDIR="$(amgetconf "${CONF}" indexdir)"
    AMANDA_INDEXDIR="${AMANDA_INDEXDIR#/}"
    if [ -n "${AMANDA_INDEXDIR}" ]; then
        printf " @@define AMANDA_INDEXDIR %s\\n" "${AMANDA_INDEXDIR}"
        if [ -f "disklist" ]; then
            while read -r host dev rest; do
                if echo "${host}" | grep -Eq '^(#.*)?$'; then continue; fi
                dev="$(echo "${dev}" | sed 's|[/:]|_|g;s|\\"||g')"
                if ! skip_multiline_dle; then
                    printf "!/@@{AMANDA_INDEXDIR}/%s/%s/@@{YEAR4D}[0-9]{4}_[0123]\\.gz$ f\\n" "${host}" "${dev}"
                    printf " /@@{AMANDA_INDEXDIR}/%s/%s$ d VarDir\\n" "${host}" "${dev}"
                fi
            done < disklist
            MULTILINEDLE=0
        fi
    fi
    AMANDA_CHANGERFILE="$(amgetconf "${CONF}" changerfile)"
    AMANDA_CHANGERDIR="${AMANDA_CHANGERFILE%changer}"
    AMANDA_CHANGERDIR="${AMANDA_CHANGERDIR#/}"
    if [ -n "${AMANDA_CHANGERDIR}" ]; then
        printf " @@define AMANDA_CHANGERDIR %s\\n" "${AMANDA_CHANGERDIR}"
        printf "/@@{AMANDA_CHANGERDIR}/(changer-(access|clean|slot)|tapelist(\\.yesterday)?)$ f VarFile\\n"
        printf "/@@{AMANDA_CHANGERDIR}$ d VarDir\\n"
    fi
    AMANDA_INFOFILE="$(amgetconf "${CONF}" infofile)"
    AMANDA_INFOFILE="${AMANDA_INFOFILE#/}"
    if [ -n "${AMANDA_INFOFILE}" ]; then
        printf " @@define AMANDA_INFOFILE %s\\n" "${AMANDA_INFOFILE}"
        if [ -f "disklist" ]; then
            while read -r host dev rest; do
                if echo "${host}" | grep -qE '^(#.*)?$'; then continue; fi
                #shellcheck disable=SC2001
                dev="$(echo "${dev}" | sed 's|[/:]|_|g;s|\"||g')"
                if ! skip_multiline_dle; then
                    printf " /@@{AMANDA_INFOFILE}/%s/%s/info$ f VarFile\\n" "${host}" "${dev}"
                    printf " /@@{AMANDA_INFOFILE}/%s/%s$ d VarDir\\n" "${host}" "${dev}"
                fi
            done < disklist
            MULTILINEDLE=0
        fi
    fi
    # this is hardcoded since amgetconf refuses to deliver diskdir
    AMANDA_HOLDING="srv/amanda/holding"
    if [ -n "$AMANDA_HOLDING" ]; then
        printf " /%s$ d VarDir\\n" "${AMANDA_HOLDING}"
    fi
    printf " @@define AMANDALOG var/log/amanda/server/%s\\n" "${CONF}"
    printf "!/@@{AMANDALOG}/(amcheck|amlogroll|amreport|amtrm(idx|log)|chunker|driver|dumper|planner|taper)\\.@@{YEAR4D}[0-9]{10}\\.debug$ f\\n"
    printf "!/@@{AMANDALOG}/(chunker|dumper)\\.@@{YEAR4D}[0-9]{13}\\.debug$ f\\n"
    printf " /@@{AMANDALOG}$ d VarDir\\n"
    printf " /var/log/amanda/server$ d VarDir\\n"
done

printf " @@define AMANDALOG var/log/amanda/amandad\\n"
printf "!/@@{AMANDALOG}/(amandad)\\.@@{YEAR4D}[0-9]{10}\\.debug$ f\\n"
printf " /@@{AMANDALOG}$ d VarDir\\n"
printf " /tmp/amanda$ d VarDir\\n"

# vim:tabstop=4:expandtab:shiftwidth=2
