Submitted By: Robert Connolly (ashes) Date: 2006-10-12 Initial Package Version: 7.0 Upstream Status: Submitted Origin: Based on Openwall Owl Linux - vim-6.4-owl-tmp.diff Description: This patch modifies Vim for paranoid temporary file creation. diff -Naur vim70.orig/runtime/tools/vimspell.sh vim70/runtime/tools/vimspell.sh --- vim70.orig/runtime/tools/vimspell.sh 2005-02-03 17:20:48.000000000 +0000 +++ vim70/runtime/tools/vimspell.sh 2006-10-12 12:34:33.000000000 +0000 @@ -16,7 +16,8 @@ INFILE=$1 tmp="${TMPDIR-/tmp}" -OUTFILE=`mktemp -t vimspellXXXXXX || tempfile -p vimspell || echo none` +# Different systems have different filename length limits. Let mktemp(1) figure it out. +OUTFILE=`mktemp || tempfile -p vimspell || echo none` # If the standard commands failed then create the file # since we cannot create a directory (we cannot remove it on exit) # create a file in the safest way possible. diff -Naur vim70.orig/src/auto/configure vim70/src/auto/configure --- vim70.orig/src/auto/configure 2006-05-04 10:46:19.000000000 +0000 +++ vim70/src/auto/configure 2006-10-12 12:34:33.000000000 +0000 @@ -4209,7 +4209,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else - tmp_mkf="/tmp/Makefile-conf$$" + tmp_mkf="`pwd`/Makefile-conf$$" cat ${PYTHON_CONFDIR}/Makefile - <<'eof' >${tmp_mkf} __: @echo "python_MODLIBS='$(MODLIBS)'" @@ -12637,9 +12637,10 @@ + for ac_func in bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \ - memset nanosleep opendir putenv qsort readlink select setenv \ + memset mkstemp nanosleep opendir putenv qsort readlink select setenv \ setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ sigvec strcasecmp strerror strftime stricmp strncasecmp \ strnicmp strpbrk strtol tgetent towlower towupper iswupper \ diff -Naur vim70.orig/src/config.h.in vim70/src/config.h.in --- vim70.orig/src/config.h.in 2006-04-20 12:49:16.000000000 +0000 +++ vim70/src/config.h.in 2006-10-12 12:34:33.000000000 +0000 @@ -148,6 +148,7 @@ #undef HAVE_LSTAT #undef HAVE_MEMCMP #undef HAVE_MEMSET +#undef HAVE_MKSTEMP #undef HAVE_NANOSLEEP #undef HAVE_OPENDIR #undef HAVE_PUTENV diff -Naur vim70.orig/src/configure.in vim70/src/configure.in --- vim70.orig/src/configure.in 2006-05-04 10:46:11.000000000 +0000 +++ vim70/src/configure.in 2006-10-12 12:34:33.000000000 +0000 @@ -626,7 +626,7 @@ dnl see what the interpreter is built from AC_CACHE_VAL(vi_cv_path_python_plibs, [ - tmp_mkf="/tmp/Makefile-conf$$" + tmp_mkf="`pwd`/Makefile-conf$$" cat ${PYTHON_CONFDIR}/Makefile - <<'eof' >${tmp_mkf} __: @echo "python_MODLIBS='$(MODLIBS)'" @@ -2408,7 +2408,7 @@ dnl Check for functions in one big call, to reduce the size of configure AC_CHECK_FUNCS(bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \ - memset nanosleep opendir putenv qsort readlink select setenv \ + memset mkstemp nanosleep opendir putenv qsort readlink select setenv \ setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ sigvec strcasecmp strerror strftime stricmp strncasecmp \ strnicmp strpbrk strtol tgetent towlower towupper iswupper \ diff -Naur vim70.orig/src/fileio.c vim70/src/fileio.c --- vim70.orig/src/fileio.c 2006-04-30 15:28:57.000000000 +0000 +++ vim70/src/fileio.c 2006-10-12 12:40:28.000000000 +0000 @@ -3270,7 +3270,6 @@ #if defined(UNIX) || defined(WIN32) else if ((bkc_flags & BKC_AUTO)) /* "auto" */ { - int i; # ifdef UNIX /* @@ -3302,10 +3301,18 @@ { /* * Check if we can create a file and set the owner/group to - * the ones from the original file. - * First find a file name that doesn't exist yet (use some - * arbitrary numbers). + * the ones from the original file. First find a file name + * that doesn't exist yet */ +# ifdef HAVE_MKSTEMP + sprintf((char *)IObuff, "%s.XXXXXX", fname); + fd = mkstemp((char *)IObuff); +# else + /* + * If mkstemp(3) does not exist then use some arbitrary + * numbers. + */ + int i; STRCPY(IObuff, fname); for (i = 4913; ; i += 123) { @@ -3315,6 +3322,7 @@ } fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL|O_NOFOLLOW, perm); +# endif /* HAVE_MKSTEMP */ if (fd < 0) /* can't write in directory */ backup_copy = TRUE; else diff -Naur vim70.orig/src/vimtutor vim70/src/vimtutor --- vim70.orig/src/vimtutor 2004-06-07 14:32:27.000000000 +0000 +++ vim70/src/vimtutor 2006-10-12 12:34:33.000000000 +0000 @@ -12,7 +12,8 @@ # We need a temp file for the copy. First try using a standard command. tmp="${TMPDIR-/tmp}" -TUTORCOPY=`mktemp $tmp/tutorXXXXXX || tempfile -p tutor || echo none` +# Different systems have different filename length limits. Let mktemp(1) figure it out. +TUTORCOPY=`mktemp || tempfile -p tutor || echo none` # If the standard commands failed then create a directory to put the copy in. # That is a secure way to make a temp file. @@ -36,8 +37,9 @@ export TUTORCOPY -# remove the copy of the tutor on exit -trap "rm -rf $TODELETE" 0 1 2 3 9 11 13 15 +# Remove the copy of the tutor on exit. +trap 'rm -rf -- "$TODELETE"' EXIT +trap 'trap - EXIT; rm -rf -- "$TODELETE"; exit 1' HUP INT QUIT TERM # Vim could be called "vim" or "vi". Also check for "vim6", for people who # have Vim 5.x installed as "vim" and Vim 6.0 as "vim6".