#!/bin/sh

# PROVIDE: panicmail
# REQUIRE: savecore mail

# Define panicmail_enable in /etc/rc.conf to enable sending of email when the
# system reboots after a panic.
#
: ${panicmail_enable=NO}

. /etc/rc.subr

name="panicmail"
rcvar=`set_rcvar`
start_cmd="panicmail_run"
stop_cmd=":"

panicmail_run()
{
	local nr
	local tmpfile

	# Quit if we have no dumps
	if [ -z "`ls $dumpdir/info.* 2>/dev/null`" ]; then
		return 0;
	fi

	# Quit if we have nowhere to send an email
	if [ -z "${panicmail_addr}" ]; then
		echo "panicmail is enabled but panicmail_addr is not set!"
		return 1;
	fi

	# Figure out which dump is the most recent
	nr=`ls -art $dumpdir/info.* | tail -1`
	nr=${nr##*.}

	# Have we already sent an email about this one?
	if [ -f "$dumpdir/panicmail.$nr" ]; then
		return 0;
	fi

	# Send an email
	touch $dumpdir/panicmail.$nr
	chmod 600 $dumpdir/panicmail.$nr
	(
		echo "To: ${panicmail_addr}"
		echo "From: EC2 Instance <root@localhost>"
		echo "Subject: Kernel panic"
		echo
		cat $dumpdir/info.$nr
		echo
		echo "Backtrace:"

		# Workaround for shell breakage
		echo bt > $dumpdir/panicmail.$nr.tmp
		echo quit >> $dumpdir/panicmail.$nr.tmp
		kgdb -q `sysctl -n kern.bootfile` $dumpdir/vmcore.$nr \
		    <$dumpdir/panicmail.$nr.tmp 2>/dev/null
		rm $dumpdir/panicmail.$nr.tmp
	) > $dumpdir/panicmail.$nr
	sendmail -t < $dumpdir/panicmail.$nr
}

load_rc_config $name
run_rc_command "$1"
