#!/bin/sh
#
# /etc/rc.d/rc.sdlog: copies log files when an sd card is inserted
#

#set -x

MEDIA_DIR=/media

INOTIFY_CMD="/sbin/inotifyd /bin/echo ${MEDIA_DIR}"
NAVICO_COREDUMP_FLAG=/tmp/navico_coredump_active

LOGGER="logger -t navico-logtomedia"

if [ -e /etc/navico-coredump.conf ]; then
    . /etc/navico-coredump.conf
else
    echo "/etc/navico-coredump.conf is missing"
    exit 1
fi

${INOTIFY_CMD} | while read EVENT DIR FILE; do
    FORCECRASH=
    if [ "${EVENT}" = "n" ] && [ "${DIR}" = "${MEDIA_DIR}" ] && [ -d "${DIR}/${FILE}" ] && ! [ -e "$NAVICO_COREDUMP_FLAG" ]; then
        MMC_DIR="${DIR}/${FILE}"
        if ! grep -q "${MMC_DIR}" /proc/mounts; then
            sleep 2
        fi
        if [ -e "${MMC_DIR}"/navico-debug.conf ];then
            DATE=$(date +%s)

            echo "Detected ${MMC_DIR}/navico-debug.conf. Parsing..." | ${LOGGER}

            if grep -i -q 'forceprocesscrash=*' "${MMC_DIR}"/navico-debug.conf; then
                PROCESSNAME=$(grep -i forceprocesscrash "${MMC_DIR}"/navico-debug.conf | cut -d = -f 2 | tr -d '\r')
                echo "  Requested $PROCESSNAME to crash. Sending SIGILL" | ${LOGGER}
                killall -ILL $PROCESSNAME
                FORCECRASH=true
            fi
            if grep -i -q 'starttelnet=*' "${MMC_DIR}"/navico-debug.conf; then
                echo "  Requested telnet" | ${LOGGER}
                if ! pgrep telnetd; then
                    telnetd
                fi
            fi
            if grep -i -q 'execcmd=*' "${MMC_DIR}"/navico-debug.conf; then
                CMD=$(grep -i execcmd "${MMC_DIR}"/navico-debug.conf | cut -d = -f 2 | tr -d '\r')
                echo "  Requested command: ${CMD}" | ${LOGGER}
                (
                    cd $MMC_DIR
                    eval $CMD
                ) &
            fi
            if grep -i -q "copylogfiles=true" "${MMC_DIR}"/navico-debug.conf && [ -z "$FORCECRASH" ]; then
                echo "  Copying logs to sd card" | ${LOGGER}
                pkill -STOP NOSApp
                if ! [ -d  "$MMC_DIR"/logs."$DATE" ]; then
                    mkdir -p "$MMC_DIR"/logs."$DATE"
                fi
                for grab in ${FILE_GRAB_LIST}; do
                    cp -r "${grab}" "${DIR}/${FILE}"/logs."$DATE"
                done
                sync
                pkill -CONT NOSApp
            fi
        fi
    fi
done
