Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 May 2000 08:37:10 +0200 (CEST)
From:      clefevre@citeweb.net
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   conf/18461: vi.recover misplaced in /var/tmp
Message-ID:  <200005090637.IAA05533@gits.dyndns.org>

next in thread | raw e-mail | index | archive | help

>Number:         18461
>Category:       conf
>Synopsis:       vi.recover misplaced in /var/tmp
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon May 08 23:40:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Cyrille Lefevre
>Release:        FreeBSD 4.0-STABLE i386
>Organization:
ACME
>Environment:

FreeBSD gits 4.0-STABLE FreeBSD 4.0-STABLE #15: Tue May  9 00:32:14 CEST 2000     root@gits:/disk2/4.0-STABLE/src/sys/compile/CUSTOM  i386

>Description:

	vi.recover should not be in /var/tmp. imagine the case
	where /var/tmp is a memory filesystem. upon reboot,
	everything is lost.

>How-To-Repeat:

	make /var/tmp a memory filesystem in /etc/fstab as :

		swap /var/tmp mfs rw,async,-s65535 0 0

	edit files, left them open, then reboot.
	nothing can be recovered. there all lost.

>Fix:

	first, sets a variable $vi_recover to "/var/tmp/vi.recover"
	in /etc/defaults/rc.conf. in /etc/rc, if that variable in
	not to its default value, update /etc/vi.exrc in consequence.
	in all case, use it to determine where are files to recover.

Index: /usr/src/etc/defaults/rc.conf
===================================================================
RCS file: /home/ncvs/src/etc/defaults/rc.conf,v
retrieving revision 1.53.2.3
diff -u -r1.53.2.3 rc.conf
--- /usr/src/etc/defaults/rc.conf	2000/04/15 11:02:40	1.53.2.3
+++ /usr/src/etc/defaults/rc.conf	2000/05/09 06:25:20
@@ -276,6 +276,7 @@
 svr4_enable="NO"	# SysVR4 emulation loaded at startup (or NO).
 osf1_enable="NO"	# Alpha OSF/1 emulation loaded at startup (or NO).
 rand_irqs="NO"		# Stir the entropy pool (like "5 11" or NO).
+vi_recover="/var/tmp/vi.recover" # The directory where recovery files are stored.
 clear_tmp_enable="NO"	# Clear /tmp at startup.
 ldconfig_paths="/usr/lib/compat /usr/X11R6/lib /usr/local/lib"
 			# shared library search paths
Index: /usr/src/etc/rc
===================================================================
RCS file: /home/ncvs/src/etc/rc,v
retrieving revision 1.212
diff -u -r1.212 rc
--- /usr/src/etc/rc	2000/02/28 19:54:06	1.212
+++ /usr/src/etc/rc	2000/05/09 06:32:00
@@ -413,11 +413,26 @@
 echo '.'
 
 # Recover vi editor files.
-find /var/tmp/vi.recover ! -type f -a ! -type d -delete
-vibackup=`echo /var/tmp/vi.recover/vi.*`
-if [ "${vibackup}" != '/var/tmp/vi.recover/vi.*' ]; then
+if [ -n "$vi_recover" ]; then
+	if [ "$vi_recover" != /var/tmp/vi.recover ]; then
+		if [ -s /etc/vi.exrc ]; then
+			# be conservative
+			sed -e 's/recdir=[^ 	]*[ 	]*//' \
+			    -e '/^[ 	]*set[ 	]*$/d' \
+				/etc/vi.exrc > /tmp/vi.exrc.$$ &&
+			cp /tmp/vi.exrc.$$ /etc/vi.exrc &&
+			rm /tmp/vi.exrc.$$
+		fi
+		echo set recdir=$vi_recover >> /etc/vi.exrc
+	fi
+else
+	vi_recover=/var/tmp/vi.recover # just in case
+fi
+find $vi_recover ! -type f -a ! -type d -delete
+vibackup=`echo $vi_recover/vi.*`
+if [ "${vibackup}" != '$vi_recover/vi.*' ]; then
 	echo 'Recovering vi editor sessions'
-	for i in /var/tmp/vi.recover/vi.*; do
+	for i in $vi_recover/vi.*; do
 		# Only test files that are readable.
 		if [ ! -r "${i}" ]; then
 			continue
@@ -432,9 +447,9 @@
 
 	# It is possible to get incomplete recovery files, if the editor
 	# crashes at the right time.
-	virecovery=`echo /var/tmp/vi.recover/recover.*`
-	if [ "${virecovery}" != "/var/tmp/vi.recover/recover.*" ]; then
-		for i in /var/tmp/vi.recover/recover.*; do
+	virecovery=`echo $vi_recover/recover.*`
+	if [ "${virecovery}" != "$vi_recover/recover.*" ]; then
+		for i in $vi_recover/recover.*; do
 			# Only test files that are readable.
 			if [ ! -r "${i}" ]; then
 				continue
@@ -452,6 +467,7 @@
 		done
 	fi
 fi
+mkdir -m 1777 -p $vi_recover
 
 # Make a bounds file for msgs(1) if there isn't one already
 # "Delete important files with symlink" security hole?

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200005090637.IAA05533>