1#!/bin/sh
2#
3# $FreeBSD$
4#
5
6# PROVIDE: savecore
7# REQUIRE: dumpon ddb syslogd
8# KEYWORD: nojail
9
10. /etc/rc.subr
11
12name="savecore"
13start_cmd="savecore_start"
14start_precmd="savecore_prestart"
15stop_cmd=":"
16
17savecore_prestart()
18{
19	# Quit if we have no dump device
20	case ${dumpdev} in
21	[Nn][Oo] | '')
22		debug 'No dump device. Quitting.'
23		return 1
24		;;
25	[Aa][Uu][Tt][Oo])
26		if [ ! -L /dev/dumpdev ]; then
27			return 1
28		fi
29		dumpdev=`/bin/realpath /dev/dumpdev`
30		;;
31	esac
32
33	# If there is no crash directory set it now
34	case ${dumpdir} in
35	'')
36		dumpdir='/var/crash'
37		;;
38	[Nn][Oo])
39		dumpdir='NO'
40		;;
41	esac
42
43	if [ ! -c "${dumpdev}" ]; then
44		warn "Dump device does not exist.  Savecore not run."
45		return 1
46	fi
47
48	if [ ! -d "${dumpdir}" ]; then
49		warn "Dump directory does not exist.  Savecore not run."
50		return 1
51	fi
52	return 0
53}
54
55savecore_start()
56{
57	local dev
58
59	case "${dumpdev}" in
60	[Aa][Uu][Tt][Oo])
61		dev=
62		;;
63	*)
64		dev="${dumpdev}"
65		;;
66	esac
67
68	if savecore -C "${dev}" >/dev/null; then
69		savecore ${savecore_flags} ${dumpdir} ${dumpdev}
70		if checkyesno crashinfo_enable; then
71			${crashinfo_program} -d ${dumpdir}
72		fi
73		sync
74	else
75		check_startmsgs && echo 'No core dumps found.'
76	fi
77}
78
79load_rc_config $name
80run_rc_command "$1"
81