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