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