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>
