xref: /freebsd/libexec/rc/rc.d/virecover (revision f99f0ee14e3af81c23150a6a340259ca8a33d01a)
10696600cSBjoern A. Zeeb#!/bin/sh
20696600cSBjoern A. Zeeb#
30696600cSBjoern A. Zeeb#
40696600cSBjoern A. Zeeb
50696600cSBjoern A. Zeeb# PROVIDE: virecover
60696600cSBjoern A. Zeeb# REQUIRE: mountcritremote ldconfig
70696600cSBjoern A. Zeeb# BEFORE:  DAEMON
80696600cSBjoern A. Zeeb#
90696600cSBjoern A. Zeeb# XXX: should require `mail'!
100696600cSBjoern A. Zeeb
110696600cSBjoern A. Zeeb. /etc/rc.subr
120696600cSBjoern A. Zeeb
130696600cSBjoern A. Zeebname="virecover"
140696600cSBjoern A. Zeebdesc="Recover crashed vi sessions"
150696600cSBjoern A. Zeebrcvar="virecover_enable"
160696600cSBjoern A. Zeebstop_cmd=":"
170696600cSBjoern A. Zeebstart_cmd="virecover_start"
180696600cSBjoern A. Zeeb
190696600cSBjoern A. Zeebvirecover_start()
200696600cSBjoern A. Zeeb{
210696600cSBjoern A. Zeeb	[ -d /var/tmp/vi.recover ] || return
220696600cSBjoern A. Zeeb	find /var/tmp/vi.recover ! -type f -a ! -type d -delete
230696600cSBjoern A. Zeeb	vibackup=`echo /var/tmp/vi.recover/vi.*`
240696600cSBjoern A. Zeeb	if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
250696600cSBjoern A. Zeeb		echo -n 'Recovering vi editor sessions:'
260696600cSBjoern A. Zeeb		for i in /var/tmp/vi.recover/vi.*; do
270696600cSBjoern A. Zeeb			# Only test files that are readable.
280696600cSBjoern A. Zeeb			if [ ! -r "${i}" ]; then
290696600cSBjoern A. Zeeb				continue
300696600cSBjoern A. Zeeb			fi
310696600cSBjoern A. Zeeb
320696600cSBjoern A. Zeeb			# Unmodified nvi editor backup files either have the
330696600cSBjoern A. Zeeb			# execute bit set or are zero length.  Delete them.
340696600cSBjoern A. Zeeb			if [ -x "${i}" -o ! -s "${i}" ]; then
350696600cSBjoern A. Zeeb				rm -f "${i}"
360696600cSBjoern A. Zeeb			fi
370696600cSBjoern A. Zeeb		done
380696600cSBjoern A. Zeeb
390696600cSBjoern A. Zeeb		# It is possible to get incomplete recovery files, if the editor
400696600cSBjoern A. Zeeb		# crashes at the right time.
410696600cSBjoern A. Zeeb		virecovery=`echo /var/tmp/vi.recover/recover.*`
420696600cSBjoern A. Zeeb		if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
430696600cSBjoern A. Zeeb			for i in /var/tmp/vi.recover/recover.*; do
440696600cSBjoern A. Zeeb				# Only test files that are readable.
450696600cSBjoern A. Zeeb				if [ ! -r "${i}" ]; then
460696600cSBjoern A. Zeeb					continue
470696600cSBjoern A. Zeeb				fi
480696600cSBjoern A. Zeeb
490696600cSBjoern A. Zeeb				# Delete any recovery files that are zero length,
500696600cSBjoern A. Zeeb				# corrupted, or that have no corresponding backup file.
510696600cSBjoern A. Zeeb				# Else send mail to the user.
520696600cSBjoern A. Zeeb				recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"`
530696600cSBjoern A. Zeeb				if [ -n "${recfile}" -a -s "${recfile}" ]; then
540696600cSBjoern A. Zeeb					sendmail -t < "${i}"
550696600cSBjoern A. Zeeb				else
560696600cSBjoern A. Zeeb					rm -f "${i}"
570696600cSBjoern A. Zeeb				fi
580696600cSBjoern A. Zeeb			done
590696600cSBjoern A. Zeeb		fi
600696600cSBjoern A. Zeeb		echo '.'
610696600cSBjoern A. Zeeb	fi
620696600cSBjoern A. Zeeb}
630696600cSBjoern A. Zeeb
640696600cSBjoern A. Zeebload_rc_config $name
65*f99f0ee1SAlexander Leidinger
66*f99f0ee1SAlexander Leidinger# doesn't make sense to run in a svcj: config setting
67*f99f0ee1SAlexander Leidingervirecover_svcj="NO"
68*f99f0ee1SAlexander Leidinger
690696600cSBjoern A. Zeebrun_rc_command "$1"
70