virecover revision 126554
1#!/bin/sh
2#
3# $NetBSD: virecover,v 1.6 2002/03/22 04:34:00 thorpej Exp $
4# $FreeBSD: head/etc/rc.d/virecover 126554 2004-03-03 15:21:01Z mtm $
5#
6
7# PROVIDE: virecover
8# REQUIRE: mountcritremote ldconfig
9# BEFORE:  DAEMON
10# KEYWORD: FreeBSD
11#
12# XXX: should require `mail'!
13
14. /etc/rc.subr
15
16name="virecover"
17rcvar="`set_rcvar`"
18stop_cmd=":"
19start_cmd="virecover_start"
20
21virecover_start()
22{
23	[ -d /var/tmp/vi.recover ] || return
24	find /var/tmp/vi.recover ! -type f -a ! -type d -delete
25	vibackup=`echo /var/tmp/vi.recover/vi.*`
26	if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
27		echo -n 'Recovering vi editor sessions:'
28		for i in /var/tmp/vi.recover/vi.*; do
29			# Only test files that are readable.
30			if [ ! -r "${i}" ]; then
31				continue
32			fi
33
34			# Unmodified nvi editor backup files either have the
35			# execute bit set or are zero length.  Delete them.
36			if [ -x "${i}" -o ! -s "${i}" ]; then
37				rm -f "${i}"
38			fi
39		done
40
41		# It is possible to get incomplete recovery files, if the editor
42		# crashes at the right time.
43		virecovery=`echo /var/tmp/vi.recover/recover.*`
44		if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
45			for i in /var/tmp/vi.recover/recover.*; do
46				# Only test files that are readable.
47				if [ ! -r "${i}" ]; then
48					continue
49				fi
50
51				# Delete any recovery files that are zero length,
52				# corrupted, or that have no corresponding backup file.
53				# Else send mail to the user.
54				recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"`
55				if [ -n "${recfile}" -a -s "${recfile}" ]; then
56					sendmail -t < "${i}"
57				else
58					rm -f "${i}"
59				fi
60			done
61		fi
62		echo '.'
63	fi
64}
65
66load_rc_config $name
67run_rc_command "$1"
68