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