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