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