178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $FreeBSD$
478344Sobrien#
578344Sobrien
678344Sobrien# PROVIDE: virecover
7114726Smtm# REQUIRE: mountcritremote ldconfig
898184Sgordon# BEFORE:  DAEMON
978344Sobrien#
1078344Sobrien# XXX: should require `mail'!
1178344Sobrien
1278344Sobrien. /etc/rc.subr
1378344Sobrien
1478344Sobrienname="virecover"
15230099Sdougbrcvar="virecover_enable"
1678344Sobrienstop_cmd=":"
17124622Smtmstart_cmd="virecover_start"
1878344Sobrien
1978344Sobrienvirecover_start()
2078344Sobrien{
21111210Sdougb	[ -d /var/tmp/vi.recover ] || return
2298184Sgordon	find /var/tmp/vi.recover ! -type f -a ! -type d -delete
2398184Sgordon	vibackup=`echo /var/tmp/vi.recover/vi.*`
2498184Sgordon	if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
2598184Sgordon		echo -n 'Recovering vi editor sessions:'
2698184Sgordon		for i in /var/tmp/vi.recover/vi.*; do
2798184Sgordon			# Only test files that are readable.
2898184Sgordon			if [ ! -r "${i}" ]; then
2998184Sgordon				continue
3098184Sgordon			fi
3198184Sgordon
3298184Sgordon			# Unmodified nvi editor backup files either have the
3398184Sgordon			# execute bit set or are zero length.  Delete them.
3498184Sgordon			if [ -x "${i}" -o ! -s "${i}" ]; then
3598184Sgordon				rm -f "${i}"
3698184Sgordon			fi
3778344Sobrien		done
3898184Sgordon
3998184Sgordon		# It is possible to get incomplete recovery files, if the editor
4098184Sgordon		# crashes at the right time.
4198184Sgordon		virecovery=`echo /var/tmp/vi.recover/recover.*`
4298184Sgordon		if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
4398184Sgordon			for i in /var/tmp/vi.recover/recover.*; do
4498184Sgordon				# Only test files that are readable.
4598184Sgordon				if [ ! -r "${i}" ]; then
4698184Sgordon					continue
4798184Sgordon				fi
4898184Sgordon
4998184Sgordon				# Delete any recovery files that are zero length,
5098184Sgordon				# corrupted, or that have no corresponding backup file.
5198184Sgordon				# Else send mail to the user.
5298184Sgordon				recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"`
5398184Sgordon				if [ -n "${recfile}" -a -s "${recfile}" ]; then
5498184Sgordon					sendmail -t < "${i}"
5598184Sgordon				else
5698184Sgordon					rm -f "${i}"
5798184Sgordon				fi
5898184Sgordon			done
5998184Sgordon		fi
6098184Sgordon		echo '.'
6178344Sobrien	fi
6278344Sobrien}
6378344Sobrien
6478344Sobrienload_rc_config $name
6578344Sobrienrun_rc_command "$1"
66