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