1*0696600cSBjoern A. Zeeb#!/bin/sh 2*0696600cSBjoern A. Zeeb# 3*0696600cSBjoern A. Zeeb# $FreeBSD$ 4*0696600cSBjoern A. Zeeb# 5*0696600cSBjoern A. Zeeb 6*0696600cSBjoern A. Zeeb# PROVIDE: virecover 7*0696600cSBjoern A. Zeeb# REQUIRE: mountcritremote ldconfig 8*0696600cSBjoern A. Zeeb# BEFORE: DAEMON 9*0696600cSBjoern A. Zeeb# 10*0696600cSBjoern A. Zeeb# XXX: should require `mail'! 11*0696600cSBjoern A. Zeeb 12*0696600cSBjoern A. Zeeb. /etc/rc.subr 13*0696600cSBjoern A. Zeeb 14*0696600cSBjoern A. Zeebname="virecover" 15*0696600cSBjoern A. Zeebdesc="Recover crashed vi sessions" 16*0696600cSBjoern A. Zeebrcvar="virecover_enable" 17*0696600cSBjoern A. Zeebstop_cmd=":" 18*0696600cSBjoern A. Zeebstart_cmd="virecover_start" 19*0696600cSBjoern A. Zeeb 20*0696600cSBjoern A. Zeebvirecover_start() 21*0696600cSBjoern A. Zeeb{ 22*0696600cSBjoern A. Zeeb [ -d /var/tmp/vi.recover ] || return 23*0696600cSBjoern A. Zeeb find /var/tmp/vi.recover ! -type f -a ! -type d -delete 24*0696600cSBjoern A. Zeeb vibackup=`echo /var/tmp/vi.recover/vi.*` 25*0696600cSBjoern A. Zeeb if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then 26*0696600cSBjoern A. Zeeb echo -n 'Recovering vi editor sessions:' 27*0696600cSBjoern A. Zeeb for i in /var/tmp/vi.recover/vi.*; do 28*0696600cSBjoern A. Zeeb # Only test files that are readable. 29*0696600cSBjoern A. Zeeb if [ ! -r "${i}" ]; then 30*0696600cSBjoern A. Zeeb continue 31*0696600cSBjoern A. Zeeb fi 32*0696600cSBjoern A. Zeeb 33*0696600cSBjoern A. Zeeb # Unmodified nvi editor backup files either have the 34*0696600cSBjoern A. Zeeb # execute bit set or are zero length. Delete them. 35*0696600cSBjoern A. Zeeb if [ -x "${i}" -o ! -s "${i}" ]; then 36*0696600cSBjoern A. Zeeb rm -f "${i}" 37*0696600cSBjoern A. Zeeb fi 38*0696600cSBjoern A. Zeeb done 39*0696600cSBjoern A. Zeeb 40*0696600cSBjoern A. Zeeb # It is possible to get incomplete recovery files, if the editor 41*0696600cSBjoern A. Zeeb # crashes at the right time. 42*0696600cSBjoern A. Zeeb virecovery=`echo /var/tmp/vi.recover/recover.*` 43*0696600cSBjoern A. Zeeb if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then 44*0696600cSBjoern A. Zeeb for i in /var/tmp/vi.recover/recover.*; do 45*0696600cSBjoern A. Zeeb # Only test files that are readable. 46*0696600cSBjoern A. Zeeb if [ ! -r "${i}" ]; then 47*0696600cSBjoern A. Zeeb continue 48*0696600cSBjoern A. Zeeb fi 49*0696600cSBjoern A. Zeeb 50*0696600cSBjoern A. Zeeb # Delete any recovery files that are zero length, 51*0696600cSBjoern A. Zeeb # corrupted, or that have no corresponding backup file. 52*0696600cSBjoern A. Zeeb # Else send mail to the user. 53*0696600cSBjoern A. Zeeb recfile=`awk '/^X-vi-recover-path:/{print $2}' < "${i}"` 54*0696600cSBjoern A. Zeeb if [ -n "${recfile}" -a -s "${recfile}" ]; then 55*0696600cSBjoern A. Zeeb sendmail -t < "${i}" 56*0696600cSBjoern A. Zeeb else 57*0696600cSBjoern A. Zeeb rm -f "${i}" 58*0696600cSBjoern A. Zeeb fi 59*0696600cSBjoern A. Zeeb done 60*0696600cSBjoern A. Zeeb fi 61*0696600cSBjoern A. Zeeb echo '.' 62*0696600cSBjoern A. Zeeb fi 63*0696600cSBjoern A. Zeeb} 64*0696600cSBjoern A. Zeeb 65*0696600cSBjoern A. Zeebload_rc_config $name 66*0696600cSBjoern A. Zeebrun_rc_command "$1" 67