Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Apr 2004 15:17:14 +0200
From:      Udo Schweigert <Udo.Schweigert@siemens.com>
To:        Jean-Baptiste Quenot <jb.quenot@caraldi.com>, freebsd-ports <ports@freebsd.org>
Subject:   Re: mutt change breaks vim syntax highlighting
Message-ID:  <20040422131714.GA85938@alaska.cert.siemens.de>
In-Reply-To: <20040422092714.GF40900@anyware12.anyware>
References:  <20040422092714.GF40900@anyware12.anyware>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Apr 22, 2004 at 11:27:17 +0200, Jean-Baptiste Quenot wrote:
> Dear Udo,
> 
> Could you please  review PR 63192?  Since you introduced  a patch to the
> creation of  temp files in  Mutt with PR 62569,  there is now  a problem
> with Vim syntax highlighting.
> 
> Maintainer of Vim (David O'Brien) does  not understand why this patch is
> FreeBSD-specific and has not been  submitted to Mutt's upstreams author.
> Would you  be kind  to post  a follow-up to  this PR  and to  this list,
> explaining your motivation to do so?
> 

Adding the patch was done by another user's request, because the current mutt
code causes problems on open-session machines, when PIDs are reused and thus
mutt sometimes failes to open a tmp-file because it's already opened by
another user. Another benefit is that the usage of mktemp() gives (a little)
more security here.

I also submitted that to the mutt developers mailing list, but it seems it
hasn't been incorporated into the sources yet - and I doubt it will be done
soon, because the whole handling of tmp-files in mutt should be rewritten ...

A possible workaround would be to change the FreeBSD-patch so that the used
tmp-filenames are compatible with vim. That will again lower them security
as one would have to do something like that:

--- muttlib.c.orig	Thu Apr 22 14:43:58 2004
+++ muttlib.c	Thu Apr 22 14:51:01 2004
@@ -657,7 +657,11 @@
 
 void _mutt_mktemp (char *s, const char *src, int line)
 {
-  snprintf (s, _POSIX_PATH_MAX, "%s/mutt-%s-%d-%d", NONULL (Tempdir), NONULL(Hostname), (int) getpid (), Counter++);
+  char t[5];
+  snprintf (t, 5, "-%03d", Counter++);
+  snprintf (s, _POSIX_PATH_MAX-5, "%s/mutt-%s-XXXXXXXX", NONULL(Tempdir), NONULL(Hostname));
+  mktemp (s);
+  strncat(s, t, _POSIX_PATH_MAX);
   dprint (1, (debugfile, "%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s));
   unlink (s);
 }

(Unfortunately there's no mktemps(), and mkstemps() isn't usable here)

It's a bit ugly but it works ;-)


Best regards

--
Udo Schweigert, Siemens AG   | Voice      : +49 89 636 42170
CT IC CERT, Siemens CERT     | Fax        : +49 89 636 41166
D-81730 Muenchen / Germany   | email      : udo.schweigert@siemens.com



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